我希望这是一个简单的问题。
我可以同时继承抽象类及其实现吗?也就是说,是否可以使以下内容起作用?
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/