C++ 从零单排(1) (二)

2014-11-24 02:37:45 · 作者: · 浏览: 4
标识符实际上是一个类型形参,在使用函数模板时,要将这个形参实例化为确定的数据类型。将类型形参实例化的参数称为模板实参,用模板实参实例化的函数称为模板函数。模板函数的生成就是将函数模板的类型形参实例化的过程。

类模板也称为类属类或类生成类,是为类定义的一种模式,它使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。类模板不是一个具体的类,它代表着一族类,是这一族类的统一模式。使用类模板就是要将它实例化为具体的类。


将类模板的模板参数实例化后生成的具体的类,就是模板类。

ofstream、ifstream和fstream

ofstream: 写操作(输出)的文件类 (由ostream引申而来)
ifstream: 读操作(输入)的文件类(由istream引申而来)
fstream: 可同时读写操作的文件类 (由iostream引申而来)


ofstream, ifstream 和 fstream所有这些类的成员函数open 都包含了一个默认打开文件的方式,这三个类的默认方式各不相同:

类 参数的默认方式
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out
只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

常数据成员

类中的常数据成员的初始化,只能通过成员初始化列表的方式来进行。

用const修饰的定义对象称为常对象;
用const修饰的声明成员函数称为常成员函数;
用const修饰的声明数据成员称为常数据成员。
变量或对象被 const修饰后其值不能被更新。因此被const修饰的变量或对象必须要进行初始化。

声明方式:

const int cctwl;
int const cctwl;
int cctwl const; //这样是错误的只能有以上两种声明形式。不能省略数据类型,可以添加 public private等访问控制符


1.任何函数都不能对常数据成员赋值。
2. 构造函数对常数据成员进行初始化时也只能通过初始化列表进行。
3. 常数据成员在初始化时必须赋值或称其必须初始化.
4. 如果类有多个默认构造函数必须都初始化常数据成员。