个人愚见
基类如果有纯虚函数,派生类类必须实现基类的纯虚函数,IB有2个纯虚函数都要实现。另外《com本质论》4.8节楼主可以参考下

解决方案 »

  1.   

    其实我纠结的点是这个(我再举个例子):
    1、
    IA 有 50个甚至100 个 函数需要实现,Func001()、Func002()、Func003()、......Func100(),然后 我 CA实现了 Func001()、Func002()、Func003()、......Func100()
    2、这时,有 接口IB 继承自 接口IA, 类CB 继承自 类CA。这时 类CB 还必须再把  Func001()、Func002()、Func003()、......Func100() 实现一遍!!
    3、又有,有 接口ID 继承自 接口IB, 类CD 继承自 类CB 的话。类CD 还是得把 Func001()、Func002()、Func003()、......Func100() 再实现一遍!!
    我就觉得 当IA 的函数比较多的时候,上面的 类CB 和 类CD 必须实现一遍Func001()、Func002()、Func003()、......Func100()  比较费事啊...
    一点都不省事啊,没有发挥出继承的好处啊.........
      

  2.   

    这里忘了交代  类CB要实现接口IB,类CD要实现ID。
      

  3.   

    Func1() 是CA的不是CB的,CB并没有实例化抽象类
      

  4.   

    这里主要讲的是 一个类实现多个接口时 函数名相同的情况吧。
    我 1楼的问题 和 2、3楼纠结的情景 和 com本质论4.8节 不同吧
      

  5.   

    继承好用就用,不好用换组合
    其实我纠结的点是这个(我再举个例子):
    1、
    IA 有 50个甚至100 个 函数需要实现,Func001()、Func002()、Func003()、......Func100(),然后 我 CA实现了 Func001()、Func002()、Func003()、......Func100()
    2、这时,有 接口IB 继承自 接口IA, 类CB 继承自 类CA。这时 类CB 还必须再把  Func001()、Func002()、Func003()、......Func100() 实现一遍!!
    3、又有,有 接口ID 继承自 接口IB, 类CD 继承自 类CB 的话。类CD 还是得把 Func001()、Func002()、Func003()、......Func100() 再实现一遍!!
    我就觉得 当IA 的函数比较多的时候,上面的 类CB 和 类CD 必须实现一遍Func001()、Func002()、Func003()、......Func100()  比较费事啊...
    一点都不省事啊,没有发挥出继承的好处啊.........
      

  6.   

    是啊,但是 CA不是已经实现过 Func1()了么,且 CB是CA的子类啊,CB还是非得再实现一次Func1() ??如果 IA接口的 函数有 100个,CA已经实现了这100个函数, CB还是得再次实现这100个函数?很费事啊
      

  7.   

    是啊,但是 CA不是已经实现过 Func1()了么,且 CB是CA的子类啊,CB还是非得再实现一次Func1() ??如果 IA接口的 函数有 100个,CA已经实现了这100个函数, CB还是得再次实现这100个函数?很费事啊我觉得还是那个拿动物举例讲解纯虚函数的例子经典。IA类表示动物。
    CA实现了所有动物的100种基本特征,如吃喝生老病死等。
    CB就是具体的继承了,比如说哺乳动物,怎么吃喝、生育等。我觉得楼主不应该去质疑人家虚继承的机制,而应该试着去理解虚继承存在的意义,这才是本质。
      

  8.   

    由于 IB 继承了 IA,而 CB 继承了接口 IB,此时 CB 里面有一个需要实现的 Func1 方法。
    而这个方法必须在继承 IB 的接口的实现中实现。否则就存在二义性了。所以,在 ATL 中 , IUnknown 的三个方法都是在最终的 CComObjectXXX 中实现的。