是否可以在C ++中创建同一个类的子成员?像
这样的东西class A
{
public:
int i;
A child;
};
提前致谢。
答案 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_ptr
或std::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;
};