我有以下类结构:
class Common {
//members and data here.
};
class Derived1 : public Common
{
};
class Derived2: public Common, public Derived1
{
};
据我了解此层次结构,Derived1
和Derived2
将共享Common
中的所有成员。
有没有办法让Derived1
私有Derived2
以允许Derived2
继承Common
但具有单独的函数覆盖。
基本上我需要覆盖Derived1
和Derived2
中的虚函数,但仍然有Derived1
的函数运行(它是一个线程api)。
任何有帮助的帮助。
答案 0 :(得分:0)
正如@Walkerneo指出的那样,您不需要继承Common和Derived1。你可以简单地继承Derived1,你也可以从Common获得继承。您可以通过执行以下操作,从Derived2的方法中显式调用Derived1的方法:
void Derived2::overriddenMethod ()
{
// Do something unique here
Derived1::overriddenMethod ();
// Maybe do some more stuff
}
答案 1 :(得分:0)
即使使用单一继承,您也可以实现这一目标:
struct Base
{
virtual void foo() = 0;
virtual ~Base() { }
};
struct Intermediate : Base
{
virtual void foo() { /* ... */ }
// ...
};
struct Derived : Intermediate
{
virtual void foo()
{
Intermediate::foo();
// new stuff
}
};
答案 2 :(得分:0)
您是否尝试过为运行时多态使用虚函数,并将Derived2
类的变量指定为Derived1
类
class Common {
//members and data here.
public:
virtual void commonFunction() = 0; //keeping it pure virtual
};
class Derived1 : public Common
{
virtual void commonFunction(){
//do something in derived1
}
};
class Derived2: public Common, public Derived1
{
void commonFunction(){
//do something in derived2
}
};
int main(){
Derived2 derived2;
Derived1 *derived1;
derived1 = &derived2;
derived1->commonFunction(); //calls the common function definition in Derived1
/* ... */
}