类
类的定义和声明
最简单地来说,类就是定义了一个新的类型和一个新的作用域。
- 类成员
每个类可以没有成员,也可以定义多个成员,成员可以是数据,函数或类型别名。
一个类可以包含公有的,私有的和受保护的部分。
构造函数
创建一个类类型的对象时,编译器会自动地使用一个构造函数来初始化改对象。构造函数是一个特殊的,与类同名的成员函数,用于给每个数据成员设置适当的初始值。
成员函数
在类内部,声明成员函数是必需的,而定义成员函数是可选的。在类内部定义的函数默认为inline。在类外部定义的成员函数必需指明他们是在类的作用域中。
成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象。trans.avg_price()就是在调用名为trans的对象的avg_price()函数。如果trans是一个Sales_item对象,则在avg_price函数内部对Sales_item类成员的引用就是对trans成员的引用。
将关键字const加在形参表之后,就可以将成员函数声明为常量:
double avg_price() const; //const成员不能改变其所操作的对象的数据成员。
const必须同时出现在声明和定义中。
类定义的更多内容
1.使用类型别名来简化类:
类可以定义自己的局部类型的名字。例如,为std::string::size_type提供一个类型别名:class Screen{ public: typedef std::string::size_type index; //在类内部定义一个类型别名 private: index height; index width; };
2.显示指定inline成员函数
有些在类内部定义的简单函数会自动作为inline处理。也可以显示地声明为inline。可以在类定义体内部指定一个成员为inline,作为其声明的一部分。也可以在类定义体外部的函数上指定为inline。在类的外部定义inline会使得类比较容易阅读。
类声明与类定义
可以声明一个类而不定义它:
class Screen; //前向声明,在程序中引入了类类型Screen;在声明之后,定义之前, //类Screen是一个不完全类型,即已知Screen是一个类型,但不知道包含哪些成员。
不完全类型只能以有限的方式使用。不能定义该类型的对象。只能用于定于指向该类型的指针和引用,或者用于声明使用该类型作为形参类型或返回类型的函数。
隐含的this指针
在上一部分提到,成员函数有一个附加的隐含形参,即指向该类对象的一个指针,名为this。
成员函数不能定义this形参,而是由编译器隐式定义。成员函数可以显示使用this指针。