C++的类可不可以嵌套定义自身?

时间:2021-03-18 01:01:00
class a{
public:
a xxx;
};

编译不通过。请问有没有办法可以实现的?

17 个解决方案

#1


只能嵌套自身的指针,类似C中的list结构体那样

#2


不可以,如果行的话岂不成了无限递归

#3


如果嵌套自身如何构造对象,如何计算对象的大小呢

#4


那请问,怎样实现一个类里面有像自身一样的成员?
比如说四个一样的小正方形可以拼成一个正方形。

#5


引用楼主 hengyunabc 的回复:
class a{
public:
a xxx;
};

编译不通过。请问有没有办法可以实现的?


不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

class a
{
    static a xxx;
};

这是允许的。

#6


从构造来说,不可构造!

#7


引用 5 楼 supermegaboy 的回复:
引用楼主 hengyunabc 的回复:
class a{
public:
a xxx;
};

编译不通过。请问有没有办法可以实现的?


不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

class a
{
    static a xxx;
};

这是允许的。

高!!

#8


引用 4 楼 hengyunabc 的回复:
那请问,怎样实现一个类里面有像自身一样的成员?
比如说四个一样的小正方形可以拼成一个正方形。


这个“拼成”并不能机械地理解为面向对象意义上的包含
小正方形拼接成大正方形是几何关系,可以如下实现
bigRect = littleRect1.Union(littleRect2);
//依次拼接4个...

#9


用指向类的指针

#10


引用 9 楼 lingyin55 的回复:
用指向类的指针

实例化的时候new出四个自己来。
那四个小的需不需要再new,就看你自己的意思了。

#11


在类内定义用指针

#12


嵌套可以,但是不可以用到类的内容,否则就会出错,像楼上所说,可以定义指针,你做数据结构的时候,二叉树的左右子树不都是这么做的吗?

#13


指针,就类似于C中的Struct,你要是自身的话就死循环了。

#14


路过看看

#15


是不是只能用指向类的指针来实现?然后new?

#16


还是在类外实现吧

#17


引用 5 楼 supermegaboy 的回复:
引用楼主 hengyunabc 的回复:
 class a{
 public:
 a xxx;
 };

 编译不通过。请问有没有办法可以实现的?


 不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

 但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

 class a
 {
     static a xxx;
 };

 这是允许的。


盖个楼:

class a;

class a{
    public:
       a xxx;
}

#1


只能嵌套自身的指针,类似C中的list结构体那样

#2


不可以,如果行的话岂不成了无限递归

#3


如果嵌套自身如何构造对象,如何计算对象的大小呢

#4


那请问,怎样实现一个类里面有像自身一样的成员?
比如说四个一样的小正方形可以拼成一个正方形。

#5


引用楼主 hengyunabc 的回复:
class a{
public:
a xxx;
};

编译不通过。请问有没有办法可以实现的?


不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

class a
{
    static a xxx;
};

这是允许的。

#6


从构造来说,不可构造!

#7


引用 5 楼 supermegaboy 的回复:
引用楼主 hengyunabc 的回复:
class a{
public:
a xxx;
};

编译不通过。请问有没有办法可以实现的?


不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

class a
{
    static a xxx;
};

这是允许的。

高!!

#8


引用 4 楼 hengyunabc 的回复:
那请问,怎样实现一个类里面有像自身一样的成员?
比如说四个一样的小正方形可以拼成一个正方形。


这个“拼成”并不能机械地理解为面向对象意义上的包含
小正方形拼接成大正方形是几何关系,可以如下实现
bigRect = littleRect1.Union(littleRect2);
//依次拼接4个...

#9


用指向类的指针

#10


引用 9 楼 lingyin55 的回复:
用指向类的指针

实例化的时候new出四个自己来。
那四个小的需不需要再new,就看你自己的意思了。

#11


在类内定义用指针

#12


嵌套可以,但是不可以用到类的内容,否则就会出错,像楼上所说,可以定义指针,你做数据结构的时候,二叉树的左右子树不都是这么做的吗?

#13


指针,就类似于C中的Struct,你要是自身的话就死循环了。

#14


路过看看

#15


是不是只能用指向类的指针来实现?然后new?

#16


还是在类外实现吧

#17


引用 5 楼 supermegaboy 的回复:
引用楼主 hengyunabc 的回复:
 class a{
 public:
 a xxx;
 };

 编译不通过。请问有没有办法可以实现的?


 不能实例化一个未知大小的类,因此直接a xxx是不行的,但这里并没有发生递归的行为,因为无法实例化。

 但静态成员是一个例外,因为静态成员不在类体内创建,因此允许在类体内声明自身的静态成员,例如:

 class a
 {
     static a xxx;
 };

 这是允许的。


盖个楼:

class a;

class a{
    public:
       a xxx;
}