文档介绍:数据结构与算法分析
目录
关于'类'需要注意的点 2
C风格字符串的一些操作 8
C++ String 类 8
string 流 11
istream 类 12
ostream 类 13
文件I/O 14
列表(基于C++) 16
链表(基于C++) 25
作者 :黄兆楠
修改时间:2011年11月2日
版本号 :
关于'类'需要注意的点
1、 在函数成员的声明末尾加关键词const,表明该函数是一个常函数,这意味着它不能改变该类中任何
一个数据成员的值,任何一个改变数据成员的企图或者有可能修改数据成员的动作(比如将数据 成员传递给某个可能修改它们值的其他函数)将导致一个编译错误。
2、 构造函数:
主要的角色是初始化对象的数据成员(或者是使用默认值,或者是使用实参提供的值)
名字与类名一样,是公有函数成员,没有返回类型,可以被定义为内联函数
无论何时,当一个对象被定义时,一个构造函数就被调用,如果一个类中没有显式给出构造函 数,那么编译器将会给出一个默认的构造函数并调用它为每个数据成员分配存储空间。如果已 经为类提供了一个构造函数,那么还必须提供一个默认的构造函数,因为此时编译器不会在提 供默认的构造函数了。
构造函数的定义形式:
ClassName::ClassName(parameter_list)
:member_initializer_list
(
〃构造函数函数体
}
Memberjnitializerjist是跟在冒号后面的一个列表(可以为空),包含者由逗号隔开的如下形式的成 员初始化值设定项:
datamember(argumentjist)
这些值设定项被按照在类中定义的次序被依次调用,而不是按照他们在初始值设定列表中顺序调用, 为避免混淆,这两者应保持一致。
3、 重载函数:无论是普通函数还是类的成员函数,只要它们的参数列表中的参数在数量上或者类型上不
同,这是被允许的,这样一个函数的名字称为被重载了。
注:不允许两个函数具有相同的名字和相同的参数列表,而仅仅只是返回类型不同。
4、 默认实参:使用默认实参需要记住下面两点:
具有默认实参的形参必须是形参列表中最后的一些形参;即他们必须在所有没有默认实参的形 参后面出现
不能在函数的原型和定义中都规定默认值,通常在函数原型中给出默认值。
5、 访问函数和更动函数:一般规范设计且处于信息安全考虑,必须把类的数据成员定义为私有的,只能
被成员(以及友元)函数访问。这样使得存放在部分或者所有这些成员的值能够被广泛的经常访 问是非常必要的。
访问函数:仅仅被用来提取存储在数据成员中的值,但他们不能改变这些数据成员的值。
更动函数:用于修改数据成员的值(函数中必须有对修改的值的合理性的判断以保证信息安全)。
6、 重载运算符:C++中,可以通过定义一个。peratorA ()函数来重载任何一个运算符△,并且这个函数
的特性与已经存在的任何一个operator A 0不同来实现。
如果函数operatorA ()被定义为类C的成员函数,那么式子
aAb被看做对这个成员函数的调用,其中a是C类的一个对象,且b是它唯一的一个(显式) 的实参:
a. operatorA (b);
如果形如operatorA ()的运算符函数不是一个类的成员函数,则aAb 〈今operatorA (a, b)
7、 重载输入/输出运算符:
输出:若将operator« 0定义为类stream的一个成员,将可 会破坏标准<iostream>库。
因此operator<<()必须定义为一
个普通函数。该重载函数的类型如下
Ostream &operator« (ostream &out, const T &t)
(
//函数体
return out;
)
输入:同理,重载输入运算符的函数必须为普通函数,形式如下
ist ream &operator»( istream &in, const T &t)
(
〃函数体
return in;
}
8、 重载关系运算符(v,>, = ,<=,>=,!=)
若要为类T重载任意一个关系运算符,可以将重载函数operatorA ()定义为类T的成员函数。
原型:bool operatorA (const T &t);
定义: bool T: : operatorA (const T &t) (…}
9、 类析构函数:用于释放对象内动态分配的内存及其他成员对象的存储空间,析构函数的名字总是
类名
析构函数不能带任何参数且无返回类型
在程序中任何一个对象脱离其作用域或的地方,编译器会自动插入对析构函数的调用