现在的位置: 首页 > 综合 > 正文

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

2017年12月18日 ⁄ 综合 ⁄ 共 395字 ⁄ 字号 评论关闭

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

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

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

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

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

抱歉!评论已关闭.