新微赢技术网

标题: 有关c++中继承和派生的问题 [打印本页]

作者: 流星    时间: 2009-11-3 04:04
标题: 有关c++中继承和派生的问题
我是初学者,用的教材是《21天学通c++》。
感觉书里有关继承和派生和多重继承的问题有点搞不明白。


举个例子:
马(Horse类)是哺乳动物(Mammal类)的一种,因此两者之间有一个继承关系。Horse类可以继承使用Mammal类里的功能函数。
而所谓派生的定义是指向已有的类添加新功能的类,也就是说派生类可以在自己的类中除了继承基类的功能函数外,可以有自己另外的功能函数。
在多重继承里,假设Mammal类里包含鸟类(Bird类)和马类(Horse类),我现在要创建一个新类:飞马(Pegasus类),它要有马的跑的功能函数(Gallop())和鸟的功能函数(Fly())。我们使用多重继承,声明Pegasus类是由Bird类和Horse类继承而来就可以了。

但是,根据派生的定义,派生类是指向已有的类添加新功能的类,那么我们直接指定Pegasus类是Horse类,并派生出Fly()就可以了,何必要使用多重继承呢?

多重继承是不是多余的呢?
作者: 爱我后悔    时间: 2009-11-3 04:04
嘿嘿,我也不知道,我也搞不动,老师这样交的
作者: 成骏针织机械    时间: 2009-11-3 04:04
到以后你就知道,为什么要有个多重继承了 不过我觉得不提倡用多重继承,多了比较乱
作者: ゛,    时间: 2009-11-3 04:04
这个应该比较容易理解吧,简单说两点应用:
首先,代码重用,lz提出的例子中加入后来又加了一个飞猪(呵呵,开个玩笑),那么可以用已有的猪这个类和鸟这个类继承,这样也即是说鸟这个类可以重复使用,如果按照lz的意思的话,之后如果有飞牛、飞狗之类的都需要重写fly功能函数了,重用带来的好处还有统一管理等,当fly这个方法因为某种原因需要修改实现时,只需要修改鸟类中的fly,否则需要在每个fly实现中修改。
其次,配合抽象类在c++中实现接口,最好的例子就是COM组件的实现,这个要说起来比较麻烦,有兴趣的人可以去看com原理
作者: 神①→沙加    时间: 2009-11-3 04:04
爲每個具有相同特性的東西都定義單獨的數據結構是愚蠢的.

然而你可以這樣做.

當你一次次從鍵盤輸入類似的數據結構足夠多的時候, 你才會知道多繼承和派生的意義.
作者: ①個亼de鈊痛    时间: 2009-11-3 04:04
感谢四楼aogun版主的解答。问题回答得很清楚。


另外:lz是啥意思?




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2