【发布时间】:2021-11-23 15:20:57
【问题描述】:
两个类:Data 是父类,DerivedData 是子类。为什么cout 输出“数据”?
class Data {
protected:
int _value {};
public:
Data(int value) : _value{ value } { }
std::string getName() const {
return "Data";
}
int getValue() const {
return _value;
}
void setValue(const int i) {
_value = i;
}
};
class DerivedData: public Data {
public:
DerivedData(int value) : Data{ value } { }
std::string getName() const {
return "DerivedData";
}
int getValueDoubled() const {
return _value * 2;
}
};
DerivedData dd{ 5 };
Data d = dd;
Data& rd = dd;
cout << rd.getName() << endl;
这段代码会输出“Data”,但是为什么呢?
【问题讨论】:
-
这能回答你的问题吗? Why do we need virtual functions in C++?
-
你忘记了
virtual是多态函数所必需的。 -
作为一般提示:对于您要在子类中覆盖的每个函数,添加
override标识符以将其标记为这样,编译器会告诉您该函数是否实际覆盖.如class DerivedData : public Data { public: ...; std::string getName() override const { return "DerivedData"; } ... };
标签: c++ oop inheritance