继承与包含的区别

本文详细探讨了C++中继承和包含两种情况下的拷贝构造函数和赋值函数的行为。对于继承,讨论了基类和派生类在不同拷贝构造和赋值函数存在情况下的行为。在包含的情况下,同样分析了成员对象如何影响类的拷贝构造和赋值操作。文章强调了正确理解和使用这些函数以确保类的行为一致性的重要性。

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

一,继承

1.拷贝构造函数
拷贝构造函数难以维护,且由程序人员维护;
未动态申请空间或不需要外部资源,就不要写拷贝构造函数,系统自主合成的构造函数可以负荷
(1)基类有拷贝构造函数,派生类无拷贝构造函数:合成一个拷贝构造函数,即可以调动基类的拷贝构造函数,也可以合成调动派生类的拷贝构造函数

(2)基类无拷贝构造函数,派生类有拷贝构造函数:合成一个拷贝构造函数,无法去调动基类的拷贝构造函数(不会反向要求基类产生一个合法的拷贝构造函数)

(3)基类,派生类均有拷贝构造函数:由于构造派生类对象时需先构造基类对象,所以在派生类的拷贝构造函数中,需明确告知调动基类拷贝构造,否则默认引用基类的缺省拷贝构造函数。

(4)基类,派生类均无拷贝构造函数:用子对象构建另一子对象时,将子对象的地址抓住,按位拷贝
2.赋值函数
(1)基类无复写赋值语句,派生类有复写赋值语句:按要求合成一个赋值语句

(2)基类有复写赋值语句,派生类无复写赋值语句:派生类也会产生一个赋值语句

(3)基类,派生类均有复写赋值语句:需显示的说明调用基类的赋值语句,即在派生类中调动基类的赋值语句,否则无法调动基类的赋值语句

(4)基类,派生类均无复写赋值语句(即有缺省赋值语句):将合成赋值语句,两个对象同时赋值(正常赋值)

class Object
{
   
   
	int value;
public:
	Object(int x = 0) :value(x) {
   
   
		cout << "construct object: " << this << endl;
	}
	Object(const Object& obj) :value(obj.value)
	{
   
   
		cout << "copy construct object: " << this << endl;
	}
	Object& operator=(const Object& obj)
	{
   
   
		if (this != &obj)
		{
   
   
			value = obj.value;
		}
		cout << "Object = " << endl;
		return *this;
	}
	~Object()
	{
   
   
		cout 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值