(1)类的基本思想是数据抽象和封装。数据抽象是一种依赖接口和实现分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负载接口实现的函数以及定义类所需的各种私有函数。
(2)编译器分两步处理类:首先编译成员的声明,然后才轮到成员函数(如果有的话)。因此,成员函数体可以随意使用类中的其他成员而无需在意这些成员出现的次序。
(3)每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。
构造函数的名字和类的名字相同。和其他函数不同的是,构造函数没有返回类型;除此之外类似于其他函数,构造函数也有一个(可能为空)参数列表和一个(可能为空)函数体。类可以包括多个构造函数,和其他重载函数差不多,不同的构造函数之间必须在参数数量或者参数类型上有所区别。
不同于其他成员函数,构造函数不能被声明成const的,当我们创建类的一个const对象时,知道构造函数完成初始化过程,对象才能真正取得其“常量”属性。因此,构造函数在const对象的构造过程中可以向其写值。
(4)友元声明只能出现在类定义的内部,但是在类内部出现的具体位置不限。友元不是类的成员,它也不受它所在区域访问控制级别的约束。
(5)有时会发生这样一种情况,我们希望能修改类的某个成员数据,即使是在一个const成员函数内。可以通过在变量的声明中加入mutable关键字做到这一点。
(6)C++11新标准扩展了构造函数初始值的功能,使得我们可以定义所谓的委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说它把自己的一些职责委托给了其他构造函数。
和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一的入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括起来的参数列表,参数列表必须与类中另外一个构造函数匹配。
(7)聚合类使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说他是聚合的:
所有成员都是public的
没有定义任何构造函数
没有类内初始值
没有基类,也没有virtual函数。
Struct Data{
intival;
strings;
}