Chinaunix

标题: C++类继承有什么优势 [打印本页]

作者: john3851    时间: 2007-10-30 16:59
标题: C++类继承有什么优势
比如
class a
{
...
}

class b: public a
{
...
}
和下面的比起来有什么优势呢
class b
{
a a1;
...
}

这样的效果一样啊(不考虑基类保护性成员)。
作者: scutan    时间: 2007-10-30 17:08
一个是is-a的关系
另一个是has-a的关系
作者: baohuaihuai    时间: 2007-10-30 17:09
BS的<TCPPPL>上有个例子讲的很明白.
作者: zwylinux    时间: 2007-10-30 17:21
基类可以提供一个统一的接口;
继承也是代码重用的一个方式;
作者: perljoker    时间: 2007-10-30 17:26
感觉完全不是一回事啊
作者: john3851    时间: 2007-10-30 17:36
这个问题能说出原因的可能没几个baohuaihuai,你说tcpppl上有说,但是tcpppl一大本书啊。我觉得理解了这个才能真正理解C++ OOP的内涵,否则其实C也能写出OOP的程序。
作者: converse    时间: 2007-10-30 17:46
>>这个问题能说出原因的可能没几个
Effictive C++找来看看吧 不在这里解释了
作者: langue    时间: 2007-10-30 23:28
前者继承,后者包含,具体优劣只有在实例中才能发现。
作者: fl3w    时间: 2007-10-30 23:33
不要继承,除非你已经没有别的办法了。

[ 本帖最后由 fl3w 于 2007-10-30 23:40 编辑 ]
作者: imdemon    时间: 2007-10-31 07:31

作者: baohuaihuai    时间: 2007-10-31 11:09
原帖由 john3851 于 2007-10-30 17:36 发表
这个问题能说出原因的可能没几个baohuaihuai,你说tcpppl上有说,但是tcpppl一大本书啊。我觉得理解了这个才能真正理解C++ OOP的内涵,否则其实C也能写出OOP的程序。


tcpppl特别版,第12章第2节上有个说明.
C显然也能写出OOP的程序,但是C++已经进了一步,在"外观"上提供了OOP的概念.
前者的OOP是由程序员自己实现的.而后者是由C++自己隐含提供的,拿来用就行了.
作者: edccu    时间: 2007-10-31 12:11
想想这种继承关系,如:

C1      C2     C3  
  \       / \     /
    \    /   \  /
       C4   C5
         \   /
          C6

[ 本帖最后由 edccu 于 2007-10-31 12:18 编辑 ]
作者: anthony1983    时间: 2007-10-31 12:51
不利于分离和代码重用吧
比如
如下包含
a   b
\  /
   c
   |
   d

我想重用c的a部分和c本身的部分,而不想要b的部分,那么显然用d直接包含C时,也会把B包含进来形成d, 但是d本身根本用不到b,so没办法
只能
a   b
|\  /
d  c
用d包含a,再重写c部分的代码加入d来   
   

个人的理解

[ 本帖最后由 anthony1983 于 2007-10-31 12:54 编辑 ]
作者: shixiaobo925    时间: 2007-10-31 13:38
理念是的东西比较重要,C++是讲究面向对象的。看看下面的例子:

class A:
{
}

class B:
{
}

如果 A=床,B=双人床,那么B最好就所继承A,也就是is-a关系。
如果 A=锁,B=门,那么B最好就包含A,也就是has-a关系。

坚持这种原则下去,对于模块设计有好处。
作者: xiaomiao    时间: 2007-10-31 16:30
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2