【问题标题】:How to create a subclass object in the baseclass如何在基类中创建子类对象
【发布时间】:2019-05-03 23:53:25
【问题描述】:

我想做的是:

  • Base 类中有一个Sub 类对象。
  • 使Sub类访问Base类的变量

Base.h

#include "Sub.h"
class Base
{

Sub subobject
int x;
}

子.h

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

子.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 错误。 我该如何解决这个问题?

【问题讨论】:

  • 你不能这样做。
  • @πάνταῥεῖ 就没有别的办法了吗?
  • sizeof(Base) 是什么 - Base 类的大小(以字节为单位)?它足够大以包含intSub。后者派生自Base,应包含Base 的子对象。其中又包含xsubobject,其中又包含Base... 一路向下都是海龟。至于“任何其他方式” - 它取决于你想要实现的目标。练习的最终目标是什么?假设你以某种方式设法实现了你想要的——你将如何使用它?显示调用代码示例。
  • @IgorTandetnik 基类是游戏类,子类是逻辑类。游戏类需要逻辑类的一些函数,逻辑类需要游戏类的一些变量。那就是问题所在。我找不到解决办法
  • 为什么Logic 派生自Game?听起来不像Logicis-aGame。可能Logic 只需要一个指向Game 的指针。

标签: c++ class inheritance subclass base-class


【解决方案1】:

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

你还需要

  • 在 Base 类之前在 Base.h 中声明 Sub 类
  • 在 Base.cpp 文件中包含 Sub.h
  • 为它调用 new 以使其具有指向它的东西,并且显然是一个相应的删除(注意:不在构造函数中,因为这将创建一个循环,其中 Base 创建一个创建 Sub 的 Base 创建一个 Sub)

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

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

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

也许能更好地解释为什么基类需要子类的副本?

粗略的代码草图:

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();
}

子.h

#include "Base.h"

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

子.cpp

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

【讨论】:

  • 我已经添加了代码并改进了一些东西,请注意这不是一个好主意,如果你能澄清你实际上想要做什么,那么它可能会在一个不同的方式
  • 谢谢我成功了!
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多