C++ 为什么我的继承方法输出基类';成员而不是派生类';成员

C++ 为什么我的继承方法输出基类';成员而不是派生类';成员,c++,inheritance,datamember,C++,Inheritance,Datamember,我正试图从Mum类中打印成员“age”,该类从Dad继承了print_age()方法,但它正在从Dad的类中打印成员“age” #include <iostream> #include <string> using namespace std; int main() { class Dad { protected: int age = 59; public: void print_age() { cout << age

我正试图从Mum类中打印成员“age”,该类从Dad继承了print_age()方法,但它正在从Dad的类中打印成员“age”

#include <iostream>
#include <string>

using namespace std;

int main()
{

  class Dad
  {
  protected:
    int age = 59;

  public:
    void print_age() { cout << age << endl; }
  };

  class Mum : public Dad
  {
  protected:
    int age = 54;
  };

  Mum m;
  m.print_age();
}
#包括
#包括
使用名称空间std;
int main()
{
班长
{
受保护的:
年龄=59岁;
公众:

无效打印时间(){CUT< P>函数从<代码> DoD< /C>中调用。在代码>父DA/COD>,<代码> DoD< /COD>年龄将是输出。

< P> >函数。在代码< > DoD,<代码>爸爸> /Cord>的年龄将是输出。

< P> C++中,只有成员函数可以重写,而不是成员变量。因此,当你发命令时,函数会被调用。e

  class Mum : public Dad
  {
  protected:
    int age = 54;
  };
C++将其解释为“我知道
Dad
已经有一个名为
age
int
字段,其值为59,但我还想添加另一个名为
age
int
字段,该字段的值为59,并且只存在于
Mum
类中。”换言之,您不是在用新值替换
age
的旧值;您是在声明一个新变量,
Dad
不知道该变量与
Dad
中的一个变量同名

现在,为什么这意味着您看到值
59
?让我们看看
Dad
的代码:

  class Dad
  {
  protected:
    int age = 59;

  public:
    void print_age() { cout << age << endl; }
  };
您可以在
Dad
中看到
age
的值,而不是
Mum
中看到
age
的值。这是因为
print\u age
的代码写在
Dad
类中,在
Mum
中看不到任何内容

如果您想让
Mum
达到59岁,您可以这样做:

  class Mum : public Dad
  {
  public:
     Mum() {
        age = 54;
     }
  };
这里,构造函数说“当您创建
Mum
对象时,找到
age
数据成员并将其设置为54。”这意味着有一个
age
变量,默认为59,但在
Mum
构造函数中显式设置为54。现在,调用
print\u age
将打印出54,因为
Dad::print\u age
的代码查看刚刚设置的
age
变量

希望这有帮助!

C++中,只有成员函数可以重写,而不是成员变量。因此,当你写

  class Mum : public Dad
  {
  protected:
    int age = 54;
  };
C++将其解释为“我知道
Dad
已经有一个名为
age
int
字段,其值为59,但我还想添加另一个名为
age
int
字段,该字段的值为59,并且只存在于
Mum
类中。”换言之,您不是在用新值替换
age
的旧值;您是在声明一个新变量,
Dad
不知道该变量与
Dad
中的一个变量同名

现在,为什么这意味着您看到值
59
?让我们看看
Dad
的代码:

  class Dad
  {
  protected:
    int age = 59;

  public:
    void print_age() { cout << age << endl; }
  };
您可以在
Dad
中看到
age
的值,而不是
Mum
中看到
age
的值。这是因为
print\u age
的代码写在
Dad
类中,在
Mum
中看不到任何内容

如果您想让
Mum
达到59岁,您可以这样做:

  class Mum : public Dad
  {
  public:
     Mum() {
        age = 54;
     }
  };
这里,构造函数说“当您创建
Mum
对象时,找到
age
数据成员并将其设置为54。”这意味着有一个
age
变量,默认为59,但在
Mum
构造函数中显式设置为54。现在,调用
print\u age
将打印出54,因为
Dad::print\u age
的代码查看刚刚设置的
age
变量


希望这有帮助!

为什么你认为它应该打印
54
?59
的输出是正确的…(想想
age
指的是什么)为什么你认为它应该打印
54
?59的输出是正确的…(想想
age
指的是什么)