快速问题:我有一个带有成员变量的基类,并且我试图在派生类中“覆盖”此值。我该怎么做呢?
我试过了:
class A
{
public:
double i = 1;
};
class B : public A
{
public:
double i = 2;
};
int main(int argc, char** argv)
{
B* b = new B();
A* a = b;
std::cout << b->i << '\t' << a->i << std::endl; // output 2 1
}
但是所需的输出是“ 2 2”。
我究竟做错了什么?
谢谢,
尼克拉斯
最佳答案
您可以覆盖虚拟功能;您不能覆盖数据成员。该类层次结构具有两个不同的成员,分别命名为i
,一个在类A
和一个在类B
。
如果希望派生类更改基类中的i
值,只需在构造函数:B() { i = 2; }
中进行即可。但是更好的方法是为A
提供一个设置i
值的构造函数,并从B
调用它:
A::A(int ii = 1) : i(ii) {}
B::B() : A(2) {}
关于c++ - “优先”类成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45170918/