【总结】C++基类与派生类的赋值兼容规则

本文总结了C++中基类与派生类的赋值兼容规则,包括子类对象可以赋值给父类对象(切割/切片),父类对象不能赋值给子类对象,父类的指针/引用可以指向子类对象,以及子类的指针/引用不能直接指向父类对象。讨论了各种赋值操作的安全性和效果。
摘要由CSDN通过智能技术生成

    在初步探索了C++继承的语言特性之后,总结下其赋值兼容规则:

1.子类对象可以赋值给父类对象(切割/切片

    在公有继承的前提下,子类是可以赋值给父类对象的,为什么是共有继承(public),因为公有继承会产生“is-a”的关系,这种关系会导致子类中有结构的嵌套这父类的信息,。所以子类可以给父类赋值,期间会发生类似降级的事情,使得赋值成功。若为私有继承,则会产生“has-a”的关系,这种关系是从属关系,基类中的数据仅仅是包含在派生类中,若赋值,则不会产生类似于降级的事情发生,编译器会报错。代码如下:

#include<iostream>
using namespace std;
class A
{
public:
	A()
		:_num(0)
	{	}
private:
	int _num;

};
class B:private A
{
public:
	B()
		:A()
	{	}

private:

};

int main()
{
	B b;
	A a;
	a = b;//错误,has-a关系无法赋值
	return 0;
}
#include<iostream>
using namespace std;
class A
{
public:
	A()
		:_num(0)
	{	}
private:
	int _num;

};
class B:public A
{
public:
	B()
		:A()
	{	}

private:

};

int main()
{
	B b;
	A a;
	a = b;//正确,is - a关系可以赋值
	return 0;
}</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值