成员变量,成员变量,本质上是变量,不是数据类型。建议你好好去看看书吧
你能够用父类子类来实现这个啊,关键是要单一化,不能自身定义吧。。。
类中的成员包含自己,就需要无穷的内存,比如类的名称叫A,那么A中有对象A,A中的A又要有A,这样会无限循环下去的,跟函数中没有其他代码而只是调用自己递归是一个道理
class A {
private:
A* a = nullptr;
}
`A* a 这种a就是一个指针,在64位机器上就是一个8字节的指针,这里要理解,在一个系统上不管是什么指针,大小都是固定的。比如A类指针,B类指针,C类指针实际上是大小都一样。
而
class A{
private:
A a;
}
这种应该是错误的,这个就是先有鸡还是先有蛋,A a实际上是要调用的A的构造函数,而编译没有不知道A具体类型,需要多大的空间就会报这样的错误error: field ‘a’ has incomplete type ‘A’。
经常has-a是在装饰者模式之类的设计模式,避免继承爆炸的问题存在的。
*A是指针,大小是固定的,所以可以。
而A的大小未知,因此不可以。(这样A包含另一个A就是无限递归了)