子类的构造函数后跟冒号后的基类构造函数是什么意思?

What does it mean that a sub-class's constructor followed by a base class constructor after a colon?

本文关键字:构造函数 是什么 意思 基类 子类      更新时间:2023-10-16

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

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Person
{
public:
    Person() : name(""), age(0) {}
protected:
    string name;
    int age;
};
class Student : public Person
{
public:
    Student() : Person::Person() {}
private:
    int student_id;
};

我知道代码在类Person中做了什么:

Person() : name(""), age(0) {}

但我不明白这条线在课堂Student中做了什么:

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

那么冒号后Person::Person()的含义是什么?

Student() : Person::Person() {}在派生Student构造函数的成员初始化列表中调用基类Person的构造函数。

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

Student() : Person() {}

无需在派生构造函数

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

Student() {}

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