C++中的上溯造型体现

在所有面向对象语言中, 都隐含了上溯造型这一概念, 那么什么是上溯造型, 如声明一个基类A, 再声明一个类B继承于A, 声明一个函数, 使其参数为A类型, 那么即使我们在函数调用时传入B类型的对象, 也是可以被编译器通过的, 这其中就隐含了上溯造型这一概念. 上溯造型肯定是安全的,因为我们是从一个更特殊的类型到一个更常规的类型。换言之,衍生类是基础类的一个超集。它可以包含比基础类更多的方法,但它至少包含了基础类的方法。进行上溯造型的时候,类接口可能出 现的唯一一个问题是它可能丢失方法,而不是赢得这些方法。这便是在没有任何明确的造型或者其他特殊标注的情况下,编译器为什么允许上溯造型的原因所在。也就是说, 在这个函数中, 我们可以调用A类中所有的方法, 但如果不进行一个下溯造型的强制转换的话, 它是不能通过参数调用B类中的方法的.
在C++中, 不通过传入函数, 我们也能体现上溯造型的概念, 如图
在这里插入图片描述
定义了一个类A, 其中包含了一个函数showA(), 定义了一个类B, 使其继承于类A, 在其中包含了一个函数showB().现在, 再进行操作如图
在这里插入图片描述
在main函数中, 声明了一个A类型的指针pa, 然后分别创建了A, B类的对象a, b.现在将pa指向b,显然, 编译器并不会报错, 此时通过pa, 我们可以调用showA(), 但在调用showB()时编译器会报错, 这即是C++中上溯造型的一种体现方式, 通过指针pa我们将b上溯造型为A类型, 此时我们会丢失类B中的方法showB(), 但仍然可以调用从基类A中继承过来的showA()方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值