对此可能已经存在一个问题,但我找不到。

我敢肯定有一个简单的解决方案,但我看不到。

假设您具有以下条件:

class FooBase
{
protected:
    BarBase myInstance;
}

class FooChild : public FooBase
{
protected:
    BarChild myInstance;
}

class BarChild : public BarBase
{
}


因此,基本上,您想在FooChild类中使用BarBase的派生版本。

我认为在上面的代码中,将有2个不同的myInstance实例(一个BarBase和一个BarChild)。

我只想拥有一个实例,这样我就可以在FooBase中使用BarBase,而在FooChild中使用BarChild。

有一个优雅的解决方案吗?

最佳答案

您是否可以尝试这样的操作,以便仅创建一个实例。

#include <iostream>

class BarBase
{
}
;
class BarChild : public BarBase
{
}
;

class FooBase
{
public:
  FooBase(BarBase* baseBar);
protected:
  BarBase* myInstance;
}
;


class FooChild : public FooBase
{
public:
  FooChild(BarBase* base)
;
}
;


FooBase::FooBase(BarBase* baseBar)
{
  myInstance = baseBar;
}

FooChild::FooChild(BarBase* childBar) : FooBase(childBar)
{

}

int main()
{
  BarChild *bc = new BarChild();
  FooChild fc(bc);
}


我不知道这是正确的解决方案还是优雅的解决方案;)

关于c++ - 继承类的组成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31586119/

10-09 17:18