谁能解释为什么Driver init()方法无法打印name子级中重写的属性?
#include <iostream>
#include <string>
class Driver {
public:
std::string name = "Unknown";
void init() {
std::cout << name << std::endl;
}
};
// need public here to inherit init()
class SpecificDriver : public Driver {
public:
std::string name = "Specific";
};
int main() {
Driver d;
SpecificDriver sd;
// this gives Unknown Unknown =/
d.init();
sd.init();
}
Run Code Online (Sandbox Code Playgroud)
这给出:
Unknown
Unknown
Run Code Online (Sandbox Code Playgroud)
并且应该是:
Unknown
Specific
Run Code Online (Sandbox Code Playgroud)
你所做的事情并不完全是你认为的那样。您在 driver 中声明变量“name”,并在 SpecificDriver 中声明变量“name”。当您调用init()基类驱动程序中的定义时,该驱动程序只能访问其自己的name值为“未知”的字段。
相反,您应该使用构造函数初始化“name”变量。
像这样:
class Driver {
public:
std::string name;
Driver():name("Unknown"){} //default
Driver(std::string value):name(value){}
void init() {
std::cout << name << std::endl;
}
};
// need public here to inherit init()
class SpecificDriver : public Driver {
public:
SpecificDriver():Driver("Specific"){}
};
int main() {
Driver d;
SpecificDriver sd;
d.init();
sd.init();
}
Run Code Online (Sandbox Code Playgroud)
编辑:现场演示http://coliru.stacked-crooked.com/a/c453758867454348