【发布时间】:2013-11-18 13:44:13
【问题描述】:
是否可以在 C++ 中创建同一类的子成员?类似的东西
class A
{
public:
int i;
A child;
};
提前致谢。
【问题讨论】:
标签: c++
是否可以在 C++ 中创建同一类的子成员?类似的东西
class A
{
public:
int i;
A child;
};
提前致谢。
【问题讨论】:
标签: c++
这需要无限类型,这在 C++ 中是不可能的。
您需要额外的间接性,例如通过指针:
#include <memory>
class A {
public:
int i;
std::unique_ptr<A> child;
};
【讨论】:
std::shared_ptr 和std::weak_ptr 的可能性,以及在某些情况下可能仍然相关的裸指针或引用。另见:stackoverflow.com/questions/63365537/c-instance-of-same-class/…
你不能有一个相同类型的成员对象(否则类会变得无限大),但你的类可以有一个指向相同类型对象的指针。即,
class A
{
public:
int i;
A *child;
};
是可能的。
【讨论】:
您只能对静态数据成员执行此操作,因为允许静态数据成员的声明具有不完整的类型。您可能不会对非静态数据成员做同样的事情。您只能将它们定义为指向类本身的指针。
【讨论】:
直接 - 不。这个结构有多大?
但是还有另一种方法,你可以包含一个指向你的类的指针:
class A
{
public:
int i;
A * child;
};
如果你想更清楚地实现它,你可以使用std::unique_ptr或std::shared_ptr来代替C风格的指针,这取决于你的需要。
但是一切都取决于您想要实现的目标。如果您正在实现自己的数据结构——例如列表、树等,这是一个很好的方法。但除此之外,我认为,如果真的需要这种依赖,并且这种解决方案不是某种设计缺陷。
【讨论】:
没有。但你可以做一个参考或指针。
参考:
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;
};
【讨论】: