C++继承中,支持从下到上的转换

本文探讨了面向对象编程中的继承概念,强调了基类与派生类之间的转换规则。基类对象可以赋值给派生类对象,但反之不行,因为这可能导致类型不匹配和访问权限问题。此外,基类指针可以指向派生类对象,但派生类指针不能指向基类,以防访问未定义的内存区域。这些规则确保了类型安全和程序的正确性。
摘要由CSDN通过智能技术生成

实例

继承中支持的是从下到上的转换

比如有个基类叫职业类, class Occupation;

class Occupation
{
public:
	Occupation();
	virtual ~Occupation();
};

然后可以派生出学生类,老师类,程序员类等, 如class Student;

class Studentpublic Occupation
{
public:
	Student();
	~Student();
};

我们可以将派生类对象赋值给一个基类对象,换言之,学生类赋值给职业类。没什么问题,学生本身就是职业的一种。

但是,不能将基类赋值给派生类,因为职业可能有很多种,不能随便找来一个人就说他说学生,这样是不合适的。

int main
{
	Occupation occupation;
	Student student;
	// OK
	occupation = student;
	//ERROR
	student = occupation;
	return 0;
}

再来看指针或者引用(此时还没有引入多态的概念):

int main
{
	Occupation occupation;
	Student student;
	// OK
	Occupation * op = &student;
	// ERROR
	Student *sp = &occupation;
	return 0;
}

在这里插入图片描述

基类指针可以指向派生类对象,但是此时他的"管辖能力" 或者可访问的范围 是派生类对象中基类部分,即上图黑色的部分,此时对于基类指针来讲,他是不能访问派生类对象中红色特有的部分,无论怎么访问,都不会出现内存越界等问题,所以是合理的。

在这里插入图片描述

派生类不能指向基类,因为往往派生类类型占用空间大,所以派生类指针的可访问范围也比较大,途中绿色的部分实际上对于基类对象occupation来讲,他是没有绿色这部分内存的,但是指针sp有可能去访问绿色这部分空间,因为sp可访问范围就是黑色加上绿色的部分,如果sp去访问这部分空间,那么将出现不可预料的事情,所以编译器是不允许我们这样转换的。

总结:

本文不讨论虚函数到多态的产生,只讨论继承结构基类派生类相互转换相互引用的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值