在c ++中,我如何将对象作为与其包含类相同的类型,例如:
class Test
{
public:
private:
Test t;
};
答案 0 :(得分:3)
简短回答,你不能。
您可以指向同一类型的对象,但不能指向对象本身。
如果你需要这样做(即)不能使用指针,你的设计可能是错误的。如果你可以使用指针,请使用它。
有些原因:
您必须在实例化时创建对象,这意味着对构造函数进行无限递归调用。
对象的sizeof()
是什么?
答案 1 :(得分:2)
你不能这样做,因为它需要无限递归。 (您的t
将包含另一个t
,因此您无限期地t.t.t.t.t.t.t.t....
无效。你可以做的是把一个指针指向另一个对象,例如
private:
Test *t;
问题是当你写:
Test t;
编译器需要知道Test
的大小,以便提供足够的存储空间。在您编写Test t;
时,由于编译器没有看到Test
定义的结尾(即结束后的;
}
,因此该大小未知。 })因此无法确定它的大小。
答案 2 :(得分:1)
不可能。在最大值,您可以使用相同的引用或指针
其中class
。
class Test
{
private:
Test *t;
};
作为旁注,允许使用static
个对象。这是因为它们实际上并不与class
对象的任何特定实例绑定。即:
class Test
{
private:
Test t; // error
static Test st; // ok!
}; // define 'st' in the translation unit