首页 > 解决方案 > 如何在基类中创建子类对象

问题描述

我想做的是:

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

子文件

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

标签: c++classinheritancesubclassbase-class

解决方案


如果您将子对象存储为指针怎么办?

您还需要

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

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

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

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

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

粗略的代码草图:

基数.h

#include "Base.h"

class Sub;

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

    void createSub();
};

基数.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;
};

子文件

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

推荐阅读