使用通用函数实现2个抽象类?

时间:2010-12-24 16:53:18

标签: c++

当一个类从多个抽象类继承,当其中两个或多个抽象类具有相同名称,返回类型和参数的函数时会发生什么?

假设这里的所有功能都是虚拟的

由于

C类同时从A和B继承而且A& B有虚拟void func(int h);

2 个答案:

答案 0 :(得分:2)

如果这是你的意思,

#include <iostream.h>
 class A
 {
 public:
     virtual void a_show()=0;
     virtual void show()
     {
         cout<<"A";
     }
 };
 class B
 {
 public:
     virtual void b_show()=0;
     virtual void show()
     {
         cout<<"B";
     }
 };
 class C : public A, public B
 {   
     virtual void a_show()
     {}
     virtual void b_show()
     {}
 };
 void main()
 {
     C s;
     s.show();
 }

代码在VC ++中出错,如

error C2385: 'C::show' is ambiguous

你需要声明这样的节目:

#include <iostream.h>
 class A
 {
 public:
     virtual void a_show()=0;
     virtual void show()
     {
         cout<<"A";
     }
 };
 class B
 {
 public:
     virtual void b_show()=0;
     virtual void show()
     {
         cout<<"B";
     }
 };
 class C : public A, public B
 {   
 public:
     virtual void a_show()
     {}
     virtual void b_show()
     {}
     void show()
     {
         cout<<"C";
     }
 };
 void main()
 {
     C s;
     s.show();
 }

这肯定会给C

答案 1 :(得分:0)

C ++也允许选择继承的虚拟成员函数(IVMF),因此您不需要覆盖IVMF。借用mihsathe的例子,我们可以做到以下几点:

class C : public A, public B {   

  public:

    virtual void a_show() { }

    virtual void b_show() { }

    using B::show;
    // using A:show; // If you want to use show() from A
};