C++基础知识 - 子类(派生类)的构造函数

1. 调用父类的哪个构造函数?

// 在子类的构造函数中,显式调用父类的构造函数
Son::Son(string name, int age, string game)
	: Father(name, age) //调用父类的构造函数
{
	this->game = game;
	this->salary = 10;
}


// 没有显式的调用父类的构造函数,那么会自动调用父类的默认构造函数
Son(const char *name, const char *game){
	this->game = game;
}

C++基础知识 - 子类(派生类)的构造函数_第1张图片

 
 

2. 子类和父类的构造函数的调用顺序

  • 当创建子类对象时, 构造函数的调用顺序:
    静态数据成员的构造函数 -> 父类的构造函数 -> 非静态的数据成员的构造函数 -> 自己的构造函数

  • 注意:
    无论创建几个对象, 该类的静态成员只构建一次, 所以静态成员的构造函数只调用1次!!!
    C++基础知识 - 子类(派生类)的构造函数_第2张图片

#include 
#include 
using namespace std;

class M {
public: M() {cout << __FUNCTION__ << endl;}
};

class N {
public: N() {cout << __FUNCTION__ << endl;}
};

class A {
public: A() {cout << __FUNCTION__ << endl;}
};

//B类继承了A类
class B : public A {
public: B() {cout << __FUNCTION__ << endl;}
private:
	M m1;
	M m2;
	static N ms;
};

N B::ms;  //静态成员

int main(void) {
	B b;
	system("pause");
	return 0;
}

C++基础知识 - 子类(派生类)的构造函数_第3张图片

执行:
N::N 静态数据成员的构造函数
A::A 父类的构造函数
M::M 非静态数据成员的构造函数
M::M 非静态数据成员的构造函数
B::B 自己的构造函数

你可能感兴趣的:(C++,c++,开发语言,后端,继承,派生类)