[英]Are there any way to make implementation for abstract class which is multiple inheriting from other abstract classes in c++?
[英]Inheriting both abstract class and class implementation in C++
我希望这是一个简单的问题。
我可以继承抽象类和它的实现吗? 也就是说,可以使以下工作吗?
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
。
让B从A继承。如果这不可能,使用虚拟继承也可能有效(我不完全确定)。
如果要在C类中重用B类中的代码,请尝试执行以下操作:
class C : public A, public B {
void func1(){ B::func1(); }
}
基里尔指出:你的前提是错误的。
您的示例中的B类不继承A类(需要声明它首先执行此操作)。
因此,B.func1()与编译器的A.func1()完全不同。 在C类中,它期望您提供A.func1()的实现
上面的人发布了以下内容:
class C : public A, public B
{
// implement A::func1()
virtual void func1()
{
// delegate to inherited func1() in class B
B::func1();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.