我试图让基类的
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
?非常感谢。
可以使用虚函数来获取值:
#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