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

设置团队

我想做的是:

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

基数

#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++;
}

但是我不断收到未定义的基类和未定义的未声明的 x 错误。我该如何解决这个问题?

超数据

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

你还需要

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

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

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

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

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

粗略的代码草图:

基数

#include "Base.h"

class Sub;

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

    void createSub();
};

基础文件

#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++;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中的基类中创建派生类的对象

来自分类Dev

如何使超类中的方法创建子类对象?

来自分类Dev

如何使用在子类PHP的父类中创建的对象

来自分类Dev

如何在运行时根据构造函数参数在超类中创建子类对象(在Java中)

来自分类Dev

创建一个基类与子类的静态类型的对象?

来自分类Dev

如何在基类中获取派生类的子类型

来自分类Dev

如何在接口类中创建超类对象?

来自分类Dev

如何在SQLAlchemy中定义基类中的表列和子类中的表名?

来自分类Dev

如何在Swift 3的基类中实例化对象

来自分类Dev

如何在基类构造函数中为每个子类执行特定任务

来自分类Dev

子类的对象创建是否创建超类的对象(如果是)是否可以在子类中访问它?

来自分类Dev

如何在不创建子类和/或继承类的情况下从另一个类调用对象的方法?

来自分类Dev

如何在C ++中创建类对象的向量?

来自分类Dev

如何在cfscript中创建和使用类/对象?

来自分类Dev

如何在typescirpt中创建导入的类对象?

来自分类Dev

如何在Python中创建包含类实例的对象?

来自分类Dev

如何在C#中创建类对象列表的数组

来自分类Dev

如何在基类中使用子类的函数属性?

来自分类Dev

如何从类创建对象数组,然后将其传递给子类?

来自分类Dev

如何在子类对象的抽象类中访问私有属性的值?

来自分类Dev

如何在子类对象的抽象类中访问私有属性的值?

来自分类Dev

无法在Swift的ViewController类中创建子类的对象

来自分类Dev

如何在Scala中为Traversable的任何子类创建类型类实例

来自分类Dev

如何在Scala中为Traversable的任何子类创建类型类实例

来自分类Dev

如何在NSManagedObject Swift扩展中创建托管对象子类的实例?

来自分类Dev

如何停止在子类中调用基类的构造函数

来自分类Dev

如何遍历子类中的List <T>基类?

来自分类Dev

如何在超类对象中分解数组并将数组元素放入Ruby中的两个子类对象

来自分类Dev

从抽象基类返回子类的对象

Related 相关文章

  1. 1

    如何在C ++中的基类中创建派生类的对象

  2. 2

    如何使超类中的方法创建子类对象?

  3. 3

    如何使用在子类PHP的父类中创建的对象

  4. 4

    如何在运行时根据构造函数参数在超类中创建子类对象(在Java中)

  5. 5

    创建一个基类与子类的静态类型的对象?

  6. 6

    如何在基类中获取派生类的子类型

  7. 7

    如何在接口类中创建超类对象?

  8. 8

    如何在SQLAlchemy中定义基类中的表列和子类中的表名?

  9. 9

    如何在Swift 3的基类中实例化对象

  10. 10

    如何在基类构造函数中为每个子类执行特定任务

  11. 11

    子类的对象创建是否创建超类的对象(如果是)是否可以在子类中访问它?

  12. 12

    如何在不创建子类和/或继承类的情况下从另一个类调用对象的方法?

  13. 13

    如何在C ++中创建类对象的向量?

  14. 14

    如何在cfscript中创建和使用类/对象?

  15. 15

    如何在typescirpt中创建导入的类对象?

  16. 16

    如何在Python中创建包含类实例的对象?

  17. 17

    如何在C#中创建类对象列表的数组

  18. 18

    如何在基类中使用子类的函数属性?

  19. 19

    如何从类创建对象数组,然后将其传递给子类?

  20. 20

    如何在子类对象的抽象类中访问私有属性的值?

  21. 21

    如何在子类对象的抽象类中访问私有属性的值?

  22. 22

    无法在Swift的ViewController类中创建子类的对象

  23. 23

    如何在Scala中为Traversable的任何子类创建类型类实例

  24. 24

    如何在Scala中为Traversable的任何子类创建类型类实例

  25. 25

    如何在NSManagedObject Swift扩展中创建托管对象子类的实例?

  26. 26

    如何停止在子类中调用基类的构造函数

  27. 27

    如何遍历子类中的List <T>基类?

  28. 28

    如何在超类对象中分解数组并将数组元素放入Ruby中的两个子类对象

  29. 29

    从抽象基类返回子类的对象

热门标签

归档