在C ++中,继承共同的祖先并继承接口(并且需要在派生类中定义方法)需要多继承吗?例如。我是否必须执行以下操作(而不是合并MyInterface
和ParentClass
):
class MyInterface;
class ParentClass;
class DerivedClass1;
class DerivedClass2;
class SomeOtherType;
class YetAnotherType;
class MyInterface {
public:
// Must be defined in all derived classes
virtual SomeOtherType my_common_fxn(...) = 0;
...
};
class ParentClass {
private:
// Common ancestor
YetAnotherType _useful_member;
}
class DerivedClass1 : MyInterface, ParentClass {
public:
// Do some things with _useful_member, using approach #1
SomeOtherType my_common_fxn(...);
...
}
class DerivedClass2 : MyInterface, ParentClass {
public:
// Do some things with _useful_member, using approach #2
SomeOtherType my_common_fxn(...);
...
}
void fxn_or_method_using(ParentClass);
是否可以(优雅地)将MyInterface
和ParentClass
的功能合并到一个类中? (我相信由于MyInterface
是ABC,我不能将此类型用作fxn_or_method_using
的参数。)
如果这是重复的话,请提前道歉 - 我已经搜索过,但现有的C ++问题似乎都没有出现。 Q和/或A可能已超过我(未经训练)的头部。
答案 0 :(得分:2)
您的继承模型没有任何问题。
但是在C ++中,你需要一个多态性的指针或引用。您的fxn_or_method_using
按值获取其参数。这有几个问题。它会导致切片,它会阻止多态函数调用,并且它不能用于抽象类型,因为你无法创建那些实例。
如果您更改fxn_or_method_using
以使其参数不是参考值,那么您可以根据需要将其声明为引用MyInterface
。所有的缺点都消失了,你得到了你想要的多态行为。
答案 1 :(得分:0)
没有。您可以在C ++中使用同一个类混合虚拟和纯虚拟以及具体继承,而不会出现任何问题。
class baseClass{
public:
blah1(){
//stuff
}
virtual blah2();
virtual blah3() = 0;
};
class derivedClass : baseClass
{
};