C++ 类的前向声明、不完全类型类

本文介绍了在编程中如何正确地定义和使用类。强调了一个源文件中类定义的唯一性,并解释了类的前向声明与完整定义的区别。还讨论了不完全类型的概念及其限制条件,以及如何在不同文件中保持类定义的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介
在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的

将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。使用头文件保护符,来保证即使头文件在同一个文件中被包含多次,类定义也只出现一次。

只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数。

在创建类的对象之前,必须完整地定义该类。必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。

=======================================================================================================================

一旦遇到花括号,类的定义就结束了。并且一旦定义了类,我们就知道所有类的成员,以及存储该类的对象所需的存储空间。

在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的

将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。使用头文件保护符,来保证即使头文件在同一个文件中被包含多次,类定义也只出现一次。

-可以声明一个类而不定义它:这个声明称为——前向声明,在声明之后,定义之前,类称为——不完全类型,即已知Screen类是一个类型,但不知道包含哪些成员。

class Screen;

只声明却没有定义的类称为不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数。

在创建类的对象之前,必须完整地定义该类。必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。

只有当类定义已经在前面出现过,数据成员才能被制定为该类类型。如果该类型是不完全类型,那么数据成员只能是指向该类类型的指针或引用。

因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员,然而,只要类名一出现就可以认为该类已经声明,因此,类的数据成员可以是指向自身类型的指针或引用:

class LinkScreen{
    Screen window;
    LinkScreen *next;
    LinkScreen *prev;
};

static数据成员也可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用: 
《12.6 static类成员》

class Bar{
public:
private:
   static Bar mem1;//ok
   Bar *mem2;//ok
   Bar mem3;//no!!!!因为Bar是一个不完全类型,所以只能定义它的非static的指针或引用。
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值