C++入门学习:继承中的构造和析构以及同名成员情况

本文详细阐述了C++中继承、构造与析构的过程,包括成员初始化、构造函数调用顺序等内容,并通过实例展示了派生类构造函数的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承中的构造和析构

类中成员的初始化:成员属于那个类,则必须要该类对其初始化,即调用该类的构造函数对其进行初始化(在对象初始化列表中显示调用)

派生类构造的顺序:先调用父类构造函数初始化父类成员,再调用自己的构造函数对自己的成员进行初始化

派生类中有其他类的对象的情况下的构造顺序:

1、调用父类构造函数

2、调用类中其余类对象的构造函数

3、调用派生类自己的构造函数

#include <iostream>

using namespace std;

class Test
{
public:
	Test(int a)
	{
		cout << "Test 构造函数被调用" << endl;
	}
	~Test()
	{
		cout << "Test 析构函数被调用" << endl;
	}
};

class A
{
public:
	A()
	{
		cout << "A的 无参构造被调用" << endl;
	}
	A(int a, int b)
	{
		a1 = a;
		a2 = b;
		cout << "A的构造函数被调用" << endl;
	}
	~A()
	{
		cout << "A的析构函数被调用" << endl;
	}
private:
	int a1;
	int a2;
};

/*
类中成员的初始化:成员属于哪个类,则必须要该类对其初始化
======>必须调用该类的构造函数对其进行初始化
======> 如何调用基类的构造函数?
======> 在对象初始化列表中显示调用

派生类构造顺序:1、先调用父类构造函数构造父类成员
				2、再调用自己的构造函数对自己的成员进行初始化
析构的顺序和构造顺序相反

组合和继承在一起的时候构造的顺序:
				1、先调用父类构造函数
				2、再调用组合对象的构造函数
				3、调用派生类自己的构造函数
析构的顺序和构造的顺序相反
*/
class B:public A
{
public:
	B(): t1(1), t2(2), A(1,2)
	{
		cout << "B的构造函数被调用" << endl;
	}
	~B()
	{
		cout << "B的析构函数" << endl;
	}
private:
	Test t1;
	Test t2;
};

class P1
{
public:
	P1()
	{
		cout << "P1 的构造函数被调用" << endl;
	}
	~P1()
	{
		cout << "P1 的析构函数被调用" << endl;
	}
};

class Child:public P1
{
public:
	Child()
	{
		cout << "Child 的构造函数被调用" << endl;
	}
	~Child()
	{
		cout << "Child 的析构函数被调用" << endl;
	}
};

int main()
{
	//A a;
	//B b;
	Child c1;
	return 0;
}

继承中的同名成员

派生类的同名成员符屏蔽基类的同名成员(继承过来的同名成员空间还是存在的)

如果需要使用基类成员,需要使用域解析符进行操作


重载:类中的函数重载必须在同一个类中进行

派生类中不能重载基类的函数,如果派生类重载了基类的函数,则会屏蔽所有基类的同名函数


基类中的静态成员函数被所有派生类所共享


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值