1、在类内部定义的函数默认为inline。
class Account{
public:
Money balance(){ return bal;} //uses global definition of Money
private:
typedef long double Money; //error:cannot change meaning of Money
Money bal;
}
2、将关键字const加在形参表之后,就可以将成员函数声明为常量。
如:double avg_price() const;
const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中。
3、如果类是用struct关键字定义的,则在第一个访问标号之前的成员是公有的;如果类是用class关键字定义的,则这些成员是私有的。
4、inline成员函数的定义必须在调用该函数的每个源文件中是可见的,不在类定义体内定义的inline成员函数,其定义通常应放在有类定义的同一头文件中。
5、声明一个类而不定义它:class Screen;
定义类类型的对象:Sales_item item1;
class(或struct) Sales_item item2;
6、类不能具有自身类型的数据成员,但类的数据成员可以是指向自身类型的指针或引用。
7、类的定义以分号结束。
8、不能从const成员函数返回指向类对象的普通引用,const成员函数只能返回*this作为一个const引用。
9、基于成员函数是否为const,可以重载一个成员函数,同样的,基于一个指针形参是否指向const,可以重载一个函数。const对象只能使用const成员,非const对象可以使用任一成员,但非const版本是一个更好的匹配。
10、可变数据成员:希望类的数据成员(甚至在const成员函数内)可以修改,可以通过将它们声明为mutable来实现。
11、形参表和函数处于类作用域中,函数返回类型不一定在类作用域中,如果返回类型使用由类定义的类型,则必须使用完全限定名。
12、一旦一个名字被用作类型名,该名字就不能被重复定义。
如:typedef double Money;
13、构造函数初始化式只在构造函数的定义中而不是声明中指定。
构造函数分两个阶段执行:(1)初始化阶段;(2)普通的计算阶段,计算阶段由构造函数体中的所有语句组成。
类类型的数据成员总是在初始化阶段初始化。
没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化。可以初始化const对象或引用类型的对象,但不能对它们赋值。
成员被初始化的次序就是定义成员的次序。
14、可以通过将构造函数声明为explicit,来防止在需要隐式转换的上下文中使用构造函数。explicit关键字只能用于类内部的构造函数声明上,在类的定义体外部所做的定义上不重复定义它。