通常继承的基类的唯一实例

时间:2012-01-24 05:58:26

标签: c++ inheritance override multiple-inheritance

我有以下类结构:

class Common {
//members and data here.
};

class Derived1 : public Common 
{
};

class Derived2: public Common, public Derived1
{
};

据我了解此层次结构,Derived1Derived2将共享Common中的所有成员。 有没有办法让Derived1私有Derived2以允许Derived2继承Common但具有单独的函数覆盖。 基本上我需要覆盖Derived1Derived2中的虚函数,但仍然有Derived1的函数运行(它是一个线程api)。 任何有帮助的帮助。

3 个答案:

答案 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 
 /* ... */
}