快速问题:我有一个带有成员变量的基类,并且我试图在派生类中“覆盖”此值。我该怎么做呢?

我试过了:

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/

10-09 06:01
查看更多