第12章 类(4)

12.1.4 类声明与类定义

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

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

可以声明一个类而不定义它:

class Screen;

这个声明,有时称为前向声明(forward declaration),在程序中引入了类类型的Screen。在声明之后、定义之前,类screen是一个不完全类型(incompete type),即已知screen是一个类型,但不知道包含哪些成员。

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

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

为类的成员使用类声明

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

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

类的前向声明一般用来编写相互依赖的类。

class Class1
{
public:
	Class1 *class1;
	Class1 &class2;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值