C++学习笔记(5):C++继承时子类和父类的构造函数调用

在网上偶然看到关于父类和子类构造函数的一些注意和使用,自己想了想。记录一下。

 

我们知道 在生成子类对象的时候,一定是会调用父类的构造函数。那么问题来了。如下:

问题:子类在进行构造的时候,调用什么形式的父类构造,以及何时调用呢?

先说子类在构造的时候调用什么形式的父类吧。直接pou一张图吧

C++学习笔记(5):C++继承时子类和父类的构造函数调用_第1张图片

右边的三种情况,看图很明白了。说一下右边父类仅有有参构造,子类的调用方法,在下面的代码中做了演示。

说下左边吧,当子类中有了有参构造,你又不想自行显式的调用,那就加上一个无参构造,让编译器自己去调用这个无参构造。

不多说,直接看段代码。   我只在两个地方写了注释,需要的仔细读读那几句注释。

#include 
#include 

using namespace std;

class Animal
{
public:
	string name;
	int age;
	Animal(){
		cout << "调用父类无参构造" << endl;
	}
	Animal(string m_name , int m_age)
	{
		this->name = m_name;
		this->age = m_age;
		cout << "调用父类有参构造" << endl;
	}

};

class Son1: public Animal 
{
public:
// 本程序由于父类有了无参构造,所以不显式的调用父类有参构造。子类就自己调用父类无参构造了
	Son1(string m_name,int m_age )
	{
		this->name = m_name;
		this->age = m_age;
		cout << "调用Son1子类构造" << endl;
	}
	void show()
	{
		cout << "第一个儿子" << endl;
		cout << this->name << '\t' << this->age << endl;
	}
};

class Son2: public Animal
{
public:
	double data;
// 子类显示调用父类有参构造。
// 如果你的父类中没有自己写的无参构造,一定要这样写。自行对比上面的 子类 Son1
	Son2( string m_name , int m_age , double m_data):Animal( m_name ,  m_age)
	{
		this->name = m_name;
		this->age = m_age;
		this->data = m_data;
		cout << "调用Son2子类构造" << endl;
	}
	void show()
	{
		cout << "第二个儿子" << endl;
		cout << this->name << '\t' << this->age << '\t' << this->data << endl;
	}
};

void test01()
{
	Son1 son("石头",30);
	son.show();
}

void test02()
{
	Son2  son("悟空" , 18 , 188.89);
	son.show();
}

void main()
{
	test01();
	test02();
}

看下输出结果吧:

调用父类无参构造
调用Son1子类构造
第一个儿子
石头    30
调用父类有参构造
调用Son2子类构造
第二个儿子
悟空    18      188.89

只说构造的结果输出: 父类无参构造构造--->Son1子类构造  ----------父类有参构造---->Son2子类构造

 

作者:如果你觉得有用,记得给我点个赞哦!多谢支持!!!

 

 

你可能感兴趣的:(C++笔记和分享)