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

时间:2019-05-29 20:53:35

标签: c++ inheritance constructor

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

#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()是什么意思?

1 个答案:

答案 0 :(得分:2)

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

请注意,在这种情况下,Person::Person()可以简化为Person(),因为不需要使用其类类型对其进行完全限定。

Student() : Person() {}

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

Student() {}

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