C++ 为什么我的继承方法输出基类';成员而不是派生类';成员
我正试图从Mum类中打印成员“age”,该类从Dad继承了print_age()方法,但它正在从Dad的类中打印成员“age”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
#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
指的是什么)