为什么类的定义中不能包含自身类型,而可以包含其自身的指针类型和引用类型
2017-02-21 15:00
459 查看
一个类可以只有声明没有定义,如:
class Simple ; //没有{}部分被视为声明。
注意:
class Simple
{
} ;
这个是定义,只不过类是空的而已。只要包含{}就算定义。
对于只有声明而没有定义的类,只能声明它的指针类型或引用类型,不能直接声明其对象类型。
class Simple ;
void main(void)
{
Simple simple ; // error, ‘simple’ uses undefined class ‘Simple’
Simple *simple1 ; // OK
Simple &simple2 = *simple1; //OK
}
为什么只有声明而没有定义的类不能定义其对象类型呢?
因为如果类没有定义,编译器就不知道为这个对象分配多大空间,但是类的指针或引用类型的大小与类大小无关。
当编译器遇到 } 表示一个类的定义结束。
所以在一个类中,可以定义其自身的指针或引用类型,但是却不能定义其对象类型。因为类的定义还没有结束,无法确定其对象所占空间的大小。
class Simple
{
Simple simple ; // error C2460: ‘Simple::simple’ : uses ‘Simple’, which is being defined
Simple *simple1 ; // OK
Simple &simple2 ; //OK
};
class Simple ; //没有{}部分被视为声明。
注意:
class Simple
{
} ;
这个是定义,只不过类是空的而已。只要包含{}就算定义。
对于只有声明而没有定义的类,只能声明它的指针类型或引用类型,不能直接声明其对象类型。
class Simple ;
void main(void)
{
Simple simple ; // error, ‘simple’ uses undefined class ‘Simple’
Simple *simple1 ; // OK
Simple &simple2 = *simple1; //OK
}
为什么只有声明而没有定义的类不能定义其对象类型呢?
因为如果类没有定义,编译器就不知道为这个对象分配多大空间,但是类的指针或引用类型的大小与类大小无关。
当编译器遇到 } 表示一个类的定义结束。
所以在一个类中,可以定义其自身的指针或引用类型,但是却不能定义其对象类型。因为类的定义还没有结束,无法确定其对象所占空间的大小。
class Simple
{
Simple simple ; // error C2460: ‘Simple::simple’ : uses ‘Simple’, which is being defined
Simple *simple1 ; // OK
Simple &simple2 ; //OK
};
相关文章推荐
- 【c++】为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 类的定义中不能包含其自身类型,但是能包含其自身的指针和引用类型
- 为什么static成员的类型可以是类本身?又为什么非static成员被限定声明为其自身类对象的指针或引用?
- 为什么static成员的类型可以是类本身?又为什么非static成员被限定声明为其自身类对象的指针或引用?
- 为什么C++中的类不能定义自身类的对象,而java可以? 【转载】
- 为什么C++中的类不能定义自身类的对象,而java可以
- 十二章 类————类的数据成员可以是指向自身类型的指针或引用
- 为什么不能从子函数中返回临时对象的指针和引用,却可以返回一个临时变量的值
- 结构体内可以包含自身的指针(链表实现方法)或 引用 但不可以包含自身变量即递归 (因为这样一来结构体大小就无法确定了)
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
- 为什么序列化对象中的HashMap、HashSet或HashTable等集合不能包含对象自身的引用
- 大数组定义在main函数中不能执行,为什么将其定义为全局变量就可以执行?
- 一条单链表可以表示一个一元多项式,每个节点包含三个域:指数、系数和后继节点(指针或引用)。
- 为什么char型指针可以直接赋值而其他类型的不行呢?个人见解
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用