c++ - C++中同时继承抽象类和类实现

标签 c++ abstract-class multiple-inheritance

我希望这是一个简单的问题。

我可以同时继承抽象类及其实现吗?也就是说,是否可以使以下内容起作用?

class A { 
   virtual void func1() = 0; 
}

class B {
   void func1() { /* implementation here */ }
}

class C : public A, public B {
}

我已经尝试了一些变体,并且遇到编译错误,提示类 C 中未实现的方法。但是,如果我能做到这一点,我可以节省很多重复的代码。可能吗?


我通过创建一个名为 D 的“复合类”来解决这个问题,它继承自 A 和 B,但包含以前包含在 B 中的实现代码。这使我的继承模型不太干净,但它解决了这个问题而不需要代码重复。而且,正如我在下面的评论中指出的那样,它使我的命名约定非常粗俗。

class A { 
   virtual void func1() = 0; 
}

class B {
   // Other stuff
}

class D : public A, public B {
   void func1() { /* implementation here */ }
}

class C : public D {
}

最佳答案

class B 不是您代码中 class A 的实现。 Class B 应该继承自 class A 并且 func1 应该是虚拟的。只有在那种情况下,class B 才会是 class A 的实现。然后就不需要同时继承A和B了。

class A { 
   virtual void func1() = 0; 
}

class B : public A {
   virtual void func1() { /* implementation is here */ }
}

class C : public B {
}

否则你会得到未实现的纯虚函数func1

关于c++ - C++中同时继承抽象类和类实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369392/

相关文章:

C# : Implementation of two abstract lists within a non-generic class?

Java:一个类可以同时继承两个父类(super class)吗?

c++ - C:数据结构对齐

c++ - 在 QObject 子类中存储一对

c++ - 从 Eclipse 获得可分发程序需要做什么?

ruby-on-rails - 在 Controller 之间共享一些 before_filters

c++ - 在 C++ 中使用多重继承时 ESP 无效 (VS2005)

c++ - C++中的实例化

java - 标记接口(interface)与空抽象类

oop - 接口(interface)和抽象类有什么区别?