前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++之继承

C++之继承

作者头像
zy010101
发布2020-04-08 16:43:44
3550
发布2020-04-08 16:43:44
举报
文章被收录于专栏:程序员

派生类构造函数的调用

构造函数是用来初始化类的数据成员,它不被子类继承。在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。

当你创建一个派生类对象时,构造函数没有参数,从基类的构造函数开始调用,然后调用派生类的构造函数。

构造函数的调用是对直接基类而言的,间接基类的构造函数不会被调用。

子类有构造函数,基类的构造函数有参数,此时应当在子类的构造函数处,使用初始化列表的方法来调用父类的构造函数,否则会出错。

派生类析构函数的调用

析构函数是用来释放内存空间的,在调用时,是从子类依次向父类进行调用。

下面我们来看一段具体的代码。

代码语言:javascript
复制
#pragma once

#include <iostream>
#include <cstdlib>
#include <string>

using std::cout;
using std::string;
using std::endl;

class Cfather
{
protected:
	int num;
	string name;
	string sex;
public:
	//父类构造函数
	Cfather(int num, string name,string sex)
	{
		this->name = name;
		this->num = num;
		this->sex = sex;
		cout << "父类构造函数" << endl;
	}
	void show();

	~Cfather()
	{
		cout << "父类的析构函数" << endl;
		cout << endl << endl << endl;
	}
};

void Cfather::show()
{
	cout << name << "  " << sex << "   " << num << endl;
}

class Cson : public Cfather
{
	string clas;
	string school;
public:
	//子类构造函数
	Cson(int num,string name,string sex,string clas,string school):Cfather(num,name,sex)		//使用初始化列表调用父类构造函数
	{
		this->school = school;
		this->clas = clas;
		cout << "子类构造函数" << endl;
	}
	~Cson()
	{
		cout << "子类析构函数" << endl;
	}
};

class CGrandson : public Cson
{
public:
	CGrandson(int num, string name, string sex, string clas, string school);
	~CGrandson();

private:

};

CGrandson::CGrandson(int num, string name, string sex, string clas, string school): Cson(num,name,sex,clas,school)
{
	cout << "孙子类的构造函数" << endl;
}

CGrandson::~CGrandson()
{
	cout << "孙子类的析构函数" << endl;
}
代码语言:javascript
复制
#include "标头.h"

int main()
{
	/*Cfather father(123, "XXX", "man");*/
	Cson son(38,"XXX","men","五(2)班","XXX");

	/*father.show();*/
	son.show();

	cout << endl << endl << endl;

	CGrandson grandson(10, "xxx", "women", "五(2)班", "XXXX");

	return 0;
}

运行结果如下:

可以看的构造函数的调用是从最顶层的父类开始的,依次向下调用。而析构函数的调用刚好相反,是从最底层的派生类开始,依次向上调用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 派生类构造函数的调用
  • 派生类析构函数的调用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档