I有一个具有静态成员的基类和一个非静态功能,可返回该静态成员的值。我也有一个继承基类的派生类,但分配了替代v ...

问题描述 投票:0回答:1
如果我在派生类的实例上调用继承的getter函数,我希望它会返回派生类(1)的静态成员的值。但是,它实际上返回基类中静态成员的值(0)。

int main(int argc, char* argv[]) { Child child(); std::cout << child.GetFoo(); }

输出为
0

为什么我对这种交互的最初理解是不正确的,我将如何达到我的预期行为,在派生类的实例上呼叫getter将返回派生类的静态成员?
    

由于成员变量不是虚拟的。在
Parent::foo

的背景下,您已经遮蔽了

Child

,但是
c++ inheritance static
1个回答
0
投票

Parent

的成员。如果您真的需要这种行为,则需要以某种方式支付间接费用。例如:
class Parent
{
protected:
    virtual int foo() {
      return 0;
    }
public:
    int GetFoo()
    {
        return foo();
    }
};

class Child : Parent
{
protected:
    virtual int foo() override {
      return 1;
    }
};
	
© www.soinside.com 2019 - 2025. All rights reserved.