我想知道基类构造函数后面的代码是做什么的。这是代码:
#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()
是什么意思?
答案 0 :(得分:2)
Student() : Person::Person() {}
在派生的Person
构造函数的member initialization list中调用基类Student
的构造函数。
请注意,在这种情况下,Person::Person()
可以简化为Person()
,因为不需要使用其类类型对其进行完全限定。
Student() : Person() {}
除非派生构造函数将输入值传递给基类构造函数,否则您无需 在派生构造函数的成员初始化列表中指定基类构造函数。您的代码没有这样做,因此您可以选择完全省略基类构造函数调用。 Person()
是default constructor,编译器会自动为您调用。{p>
Student() {}
在这种情况下,您还可以选择完全省略Student
构造函数,因为它没有显式初始化其他任何东西。