C++ FAQ学习笔记 21章 继承 — 适当的继承和可置换性

本文是C++ FAQ学习笔记的第21章,聚焦于继承的适用性和对象的可置换性。讨论了Derived*转换为Base*的多态行为,解释了为何 Derived**不能直接转换为Base**,并探讨了使用特定示例(如圆和椭圆)在理解继承概念中的价值,即使实际问题可能不同。
摘要由CSDN通过智能技术生成

[21.2] Derived* —> Base* 可以很好地工作; 为什么 Derived** —> Base** 不行?

[21.4] Derived数组是一种 Base数组吗?

根本问题是 C++无法区别指向事物的指针和指向事物数组的指针,导致访问时出现指针计算错误问题
注意:如果我们使用类似数组(array-like)的类(例如,标准库中的std::vector<Derived>)来代替原始的数组,这个问题将会被作为编译时错误找出而不是运行时的灾难
详见FAQ描述。

[21.10] 但我的问题与圆和椭圆无关,这种无聊的例子对我有什么好处?

不良的继承总有一个有额外能力(经常是一个或两个额外的成员函数;有时是一个或多个成员函数给出的承诺)的基类,而派生类却无法满足它。你要么使基类弱一些,派生类强一些,要么消除继承关系。我见过很多很多很多不良的继承方案,相信我,它们都可以归结为圆/椭圆的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值