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

设置团队

我想做的是:

  • 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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档