如何在基类中创建子类对象

How to create a subclass object in the baseclass

我想做的是:

Base.h

#include "Sub.h"
class Base
{

Sub subobject
int x;
}

Sub.h

#include Base // to acces x from .cpp file
class Sub: public Base
{
void changevar();
}

Sub.cpp

#include "Sub.h"
// I tried to include base in here but that did not work either
void Sub::changevar()
{
x++;
}

但我不断收到 undefines base class 和 undefined undeclared x 错误。 我该如何解决这个问题?

如果将子对象存储为指针会怎样?

您还需要

  • 在你的 Base class
  • 之前在 Base.h 中转发你的 Sub class
  • 在您的 Base.cpp 文件中包含 Sub.h
  • 调用 new 让它有指向它的东西,显然是一个相应的删除(注意:不是在构造函数中,因为这将创建一个循环,其中 Base 创建一个 Sub,该 Sub 创建一个 Base,该 Base 创建一个 Sub)

然而,一个基类引用一个子类似乎有点奇怪class,它破坏了整个继承点,如果你需要这样做,那么你应该重新考虑你在做什么是正确的。

另请注意,Sub 将有自己的 Base 作为其一部分,因此子对象的 Base 部分将与外部 Base 不同。

例如如果 Base 本身有一个名为 Y 的整数,那么我们将有 Base 的 Y,但子对象也有一个单独的 Y。

也许可以更好地解释为什么基础 class 需要子class 的副本?

粗略的代码草图:

Base.h

#include "Base.h"

class Sub;

class Base
{
public:
    Sub* subobject;
    Base();
    ~Base();

    void createSub();
};

Base.cpp

#include "Base.h"
#include "Sub.h"

Base::Base()
{
    subobject = new Sub();
}

Base::~Base()
{
    delete subobject;
}

void Base::createSub()
{
    if (subobject)
        return;

    subobject = new Sub();
}

Sub.h

#include "Base.h"

class Sub : public Base
{
    void changevar();
    int x = 0;
};

Sub.cpp

void Sub::changevar()
{
    x++;
}