C++ 子类';在冒号后面跟一个基类构造函数?

C++ 子类';在冒号后面跟一个基类构造函数?,c++,inheritance,constructor,C++,Inheritance,Constructor,我想知道基类构造函数后面的代码是做什么的。代码如下: #包括 #包括 #包括 #包括 #包括 使用名称空间std; 班主任 { 公众: Person():姓名(“”),年龄(0){} 受保护的: 字符串名; 智力年龄; }; 班级学生:公众人士 { 公众: 学生():人::人(){} 私人: 国际学生证; }; 我知道代码在课堂上做什么Person: Person():姓名(“”),年龄(0){} 但我不明白这句话在课堂上的作用学生 Student():Person::Person(){} 那

我想知道基类构造函数后面的代码是做什么的。代码如下:

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
班主任
{
公众:
Person():姓名(“”),年龄(0){}
受保护的:
字符串名;
智力年龄;
};
班级学生:公众人士
{
公众:
学生():人::人(){}
私人:
国际学生证;
};
我知道代码在课堂上做什么
Person

Person():姓名(“”),年龄(0){}

但我不明白这句话在课堂上的作用学生

Student():Person::Person(){}

那么,冒号后面的
Person::Person()
是什么意思呢?

Student():Person::Person(){}
在派生的
Student
构造函数中调用基类
Person
的构造函数

请注意,在该上下文中,
Person::Person()
可以简化为仅
Person()
,因为不需要使用其类类型对其进行完全限定

Student():Person(){}

除非派生构造函数将输入值传递给基类构造函数,否则不需要在派生构造函数的成员初始化列表中指定基类构造函数。您的代码没有这样做,因此您可以选择完全省略基类构造函数调用
Person()
是一个,编译器将自动为您调用它

Student(){}

在这种情况下,您还可以选择完全省略
Student
构造函数,因为它不会显式初始化任何其他内容。

这应该是有用的: