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

Unique instance of a commonly inherited base class

本文关键字:基类 唯一 实例 继承 常继承      更新时间:2023-10-16

我有以下类结构:

class Common {
//members and data here.
};
class Derived1 : public Common 
{
};
class Derived2: public Common, public Derived1
{
};

据我所知,Derived1Derived2都将共享来自Common的任何成员。有没有办法在Derived2中取消Derived1的私有化,以允许Derived2仍然继承Common,但具有单独的函数重写。基本上,我需要覆盖Derived1Derived2中的一个虚拟函数,但仍然要运行Derived1的函数(它是一个线程api)。得到任何帮助。

@Walkerneo指出,您不需要同时继承Common和Derived1。您可以简单地从Derived1继承,也可以从Common继承。您可以通过执行以下操作从Derived2的方法显式调用Derived1的方法:

void Derived2::overriddenMethod ()
{
    // Do something unique here
    Derived1::overriddenMethod ();
    // Maybe do some more stuff
}

即使使用单一继承也可以实现这一点:

struct Base
{
    virtual void foo() = 0;
    virtual ~Base() { }
};
struct Intermediate : Base
{
    virtual void foo() { /* ... */ }
    // ...
};
struct Derived : Intermediate
{
    virtual void foo()
    {
        Intermediate::foo();
        // new stuff
    }
};

您是否尝试过将虚拟函数用于运行时多态性并将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 
 /* ... */
}