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

简介

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

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

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

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

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

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

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

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

-可以声明一个类而不定义它:这个声明称为——前向声明,在声明之后,定义之前,类称为——不完全类型,即已知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的指针或引用。
};

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值