C++中为什么类中自身类的对象不能做自己的数据成员,但是做静态数据成员、引用类数据成员等可以?

class student
{private:
student a;//错误!
student *b;//正确!
static student c;//正确!
}
请解释一下原因,谢谢
请解释下这三个的各自的原因,

类定义中不能包含自己本身的对象,否则会引起像无限递归的问题,而静态成员属于类,而不属于对象,静态成员的作用域属于类,但不占类的大小,不属于类的对象,内存在全局存储区。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-14
因为会导致循环引用,这个类占用的空间会无限大.
第2个回答  2014-03-14
因为类还没定义完整不能实例化
第3个回答  2014-03-14
构造函数递归调用,无穷无尽

...但是做静态数据成员、引用类数据成员等可以?
类定义中不能包含自己本身的对象,否则会引起像无限递归的问题,而静态成员属于类,而不属于对象,静态成员的作用域属于类,但不占类的大小,不属于类的对象,内存在全局存储区。

c++编程,为什么自身类的对象不可以作为该类的成员,自身类的指针或引用...
因为如果类包含自身类的对象,存在无限初始化的问题。构造一个类的对象是,先构造成员变量,然后再调用自身的构造函数,如果类包含自身的的对象,那么在调用构造函数之前,需要先构造自身类的对象。而构造自身类的对象时,又得先构造自身的对象,然后调用其构造函数……

C++中, 类的私有数据成员在定义的时候不能进行初始化吗?
是的,C++中类的数据成员不管是不是私有的,都不能进行初始化。因为类就相当于一个数据的模板,是一种自定义组合的新数据类型,而不是一个变量。当程序声明一个类的时候,事实上并没有为程序申请存储空间,只有用这个类定义一个类对象的时候,才申请空间。连空间都没有,当然不能像定义变量一样的初...

为什么类成员函数不能直接调用
关于类中的静态方法,并不是说C++就这么规定的神马的,而是有其原因 每一种规则都是有原因的,并不是神马就是规则,难道法规就是规定这么做么?当然不是,必须有其原因。(题外话)首先你要明白为什么要声明静态成员函数,静态成员函数主要为了调用方便,不需要生成对象就能调用,静态数据成员也遵守public\/...

C++问题求解,在类中为什么不能给数据成员初始化值:
因为类只是定义的类型, 还没有实例化,也就是没有定义类的对象(变量), 没法存储 你可以在初始化列表里进行初始化 , 而构造函数的函数体之内赋值的话, 是在初始化后,--- 至于定义成static的, 这是静态的, 所有对象共享一个副本, 程序开始执行就初始化了, 就算没有定义对象, 也有它的实例, ...

c++类中的静态数据成员怎么理解,在什么情况下用?等待ing!
,"<<C.GetY()<<'\\t';C.GetC();} static int countP; 为静态数据成员,这个countP数据成员可以被各个对象共享!对象在定义的同时,构造函数被调用,于是通过countP++语句countP进行值自增;此程序中共有3个对象,按顺序执行,每个对象的countP值都是对上次对象中的值的累加!试着运行下!

静态数据成员可以直接用类名调用吗?为什么?
静态数据成员是在类装载的时候就分配了内存空间,而类的成员变量是在生成对象时分配内存空间。所以只要类装载了,就可以用类名访问静态数据成员。事实上,该类的所有对象都只保存类静态数据成员的引用,他们都指向同一块内存区域。

c++ 为什么不能在类类对static成员定义? 我看的都是类内声明,类外定义...
你好,静态数据成员为各对象所共有,而不只属于某个对象的成员,所有对象都可以引用它。静态的数据成员在内存中只占一份空间,而不是每个对象都分别为它保留一份空间。所以静态数据成员只能在类体外进行初始化。再复制一下看到的别人的解释吧。静态数据成员对于所有类对象来说只有一份,因此不能在类体内...

c++11之前,只有静态常量整型数据成员才可以在类中初始化是为什么
静态常量整型数据成员 1)不是对象的一部分 2)可以产生常量表达式,所以可以在类中初始化。---否则,用它作为数组的大小,就不合适了。静态常量整型数据成员,能够用来当作常量表达式使用,不在内部定义的话,则该常量表达式未定义,就不能使用了。C++11 非静态成员变量(常量),可以直接初始化,或者在...

为什么成员内部不能定义静态的属性和方法?
因为系统执行:运行宿主类->静态变量内存分配->内部类,而此时内部类的静态变量先于内部类生成,这显然是不可能的,所以不能定义静态变量!C++中,若类的方法前加了static关键字,则该方法称为静态方法,反之为实例方法。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。

相似回答