子类的构造函数默认会调用父类的无参构造函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>

using namespace std;

class Person {

public:
int m_age;

Person() {
cout << "------------------Person()" << endl;
}
};

class Student : public Person{
public:
int m_height;

Student() {
cout << "------------------Student() " << endl;
}
};

int main() {

// 子类的构造函数会默认调用父类的构造函数。
Student student;

getchar();
return 0;
}

控制台输出:

其实设计目的:是由于在开发中为了封装性,父类的成员都是私有的,子类无法直接访问,通过调用构造来初始化父类的成员。

通过汇编子类构造器调用父类的无参构造器。在执行子类的无参构造函数体之前会调用父类的午餐构造器完成父类成员的初始化。

如果子类的构造函数显示地调用了父类的有参构造函数,就不会再去默认调用子类的无参构造函数。(构造函数调用只能通过构造方法列表)。

如果父类缺少了无参构造函数,子类的构造函数必须显示调用父类的有参构造函数。