※ 引述《purpose (purpose)》之铭言:
: ※ 引述《mself (mself)》之铭言:
: : 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : Linux/Windows
: : 问题(Question):
: : 印象中,一些书说明物件导向的范例较不真实
: : 极端一点,好像有看到举例
: : 鸭子呱呱叫、鸽子咕咕叫,
: : 鸭子和鸽子都是禽类,禽类会叫
: : 禽类(鸭子).叫()是呱呱而不是咕咕
: : ...
: 容小弟无知,岔一下题,因为说到动物的例子,突然很想贴一段话上来...
说到动物, 不禁想到以前看过一个很有趣的自嘲, 看一次笑一次
让大家看看有没有共鸣XD
https://twitter.com/tomaspetricek/status/402827811297050624
Tomas Petricek
@tomaspetricek
How #OOP models the real world?
Dog, Mammal, Animal,
NonNullAnimal, UpdatableNonEmptyMammal, NonNullMammalFactory...
也有其他回复 (应该是在 google+ 看到的, 忘了连结...)
Jingqi Xie2014年1月2日
回复
Canis_lupus
Canis
Canidae
Carnivora
Mammalia
Vertebrata
Animalia
Above is the correct inheritance chain.
不过个人觉得 OOP 真的不好学, 需要很多实务经验. 只是有时候还是会
想到一些无关紧要的小问题, 例如 java 的 .equals (好像)是一律传
Object 进去, 一些 dynamic language 的 '==' 也会正确的被 override,
那不知道 C++ 有没有 idiomatic 的写法?
举例来说, 假使有
class A { public: bool operator==(const A&) const; };
class B : public A { public: bool operator==(const B&) const; };
那当我有两个 B 的 instance 用 A* 指的时候, 被呼叫到的 operator==
实在很难说是不是 "正确" (心里想要)的....