【问题标题】:Implementing 2 abstract classes with a common function?实现 2 个具有通用功能的抽象类?
【发布时间】:2011-05-30 11:15:33
【问题描述】:

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

假设这里的所有函数都是虚拟的

谢谢

类C同时继承自A和B,A和B都有virtual void func(int h);

【问题讨论】:

  • C 是否包含 func() 的另一个实现?

标签: c++


【解决方案1】:

如果这就是你的意思,

#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

【讨论】:

    【解决方案2】:

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

    C类:公共A,公共B { 民众: 虚空 a_show() { } 虚空 b_show() { } 使用 B::show; // 使用 A:show; // 如果你想使用 A 中的 show() };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多