基类方法作用于派生类的私有成员

问题描述 投票:0回答:1

我试图让基类的

PrintVal()
打印派生类的私有成员
m_val
的值,但看起来它仍然打印1而不是2。既然d是派生成员的实例,为什么不打印它不是打印 2 吗?

#include <iostream>

class base
{
public:
    void PrintVal()
    {
        std::cout << m_val <<std::endl;
    }

private:

    int m_val = 1;
};

class derived : public base
{
public:
//    void PrintVal()
//    {
//        std::cout << m_val <<std::endl;
//    }

private:
    int m_val = 2;
};

int main()
{
    derived d;
    d.PrintVal();

    return 0;
}

如何在基类中使用

PrintVal()
在派生类中打印
m_val
?非常感谢。

c++ class inheritance
1个回答
0
投票

可以使用虚函数来获取值:

#include <iostream>

class base {
public:
    void PrintVal() {
        std::cout << GetVal() << std::endl;
    }

private:
    virtual int GetVal() { return m_val; }
    int m_val = 1;
};

class derived : public base {
public:

private:
    int GetVal() override { return m_val; }
    int m_val = 2;
};

int main() {
    derived d;
    d.PrintVal();
}

输出:

2
© www.soinside.com 2019 - 2024. All rights reserved.