同一类的班级成员?

时间:2013-11-18 13:44:13

标签: c++

是否可以在C ++中创建同一个类的子成员?像

这样的东西
class A
{
public:
  int i;
  A child;
};

提前致谢。

5 个答案:

答案 0 :(得分:5)

这需要无限类型,这在C ++中是不可能的。

您需要额外的间接,例如通过指针:

#include <memory>

class A {
public:
    int i;
    std::unique_ptr<A> child;
};

答案 1 :(得分:1)

你不能拥有相同类型的成员对象(否则该类会变得无限大)但是你的类可以有一个指向同一类型对象的指针。即,

class A
{
public:
 int i;
 A *child;
};

是可能的。

答案 2 :(得分:1)

您只能对静态数据成员执行此操作,因为允许静态数据成员的声明具有不完整的类型。您可能不会对非静态数据成员执行相同操作。您只能将它们定义为类本身的指针。

答案 3 :(得分:0)

直接 - 没有。这个结构有多大?

但还有另外一种方法,你可以在你的班级中包含指针

class A
{
public:
    int i;
    A * child;
};

如果您想更清楚地实现它,可以使用std::unique_ptrstd::shared_ptr代替C风格的指针,具体取决于您的需求。

但一切都取决于你想要达到的目标。如果您正在实现自己的数据结构 - 例如列表,树等,这是一个很好的方法。但是否则我认为,如果真的需要这种依赖性,并且这种解决方案不是某种设计缺陷。

答案 4 :(得分:0)

没有。但你可以做一个参考或指针。

参考:

class A
{
public:
    int i;
    A(A &child) : child(child) {}

    A &child;
};

光秃秃的指针:

class A
{
public:
    int i;
    A *child;
};

托管(智能)指针:

class A
{
public:
    int i;
    std::unique_ptr<A> child;
};