如何在基类中创建子类对象
How to create a subclass object in the baseclass
我想做的是:
- 在
Base
class 中有一个 Sub
class 对象。
- 使
Sub
class访问Base
class的变量
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++;
}
我想做的是:
- 在
Base
class 中有一个Sub
class 对象。 - 使
Sub
class访问Base
class的变量
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++;
}