2.1 名字空间
提供名字空间防止命名冲突。
using namespace std;
using std::cout;
名字空间除了系统定义的名字空间之外,还可以自定义。
2.2 C++输入/输出简介
输入和输出流能被操纵符格式化。
Ios::sync_with_stdio()可以同时使用C的输入输出函数和C++类库。
操纵符
输入和输出能被操纵符格式化,输了setw.
混合使用C和C++
需首先调用函数 ios::sync_with_stdio()
2.3 文件
进行文件处理必须包含头文件fstream,>>用于从文件读取数据,<<用于将数据输出到文件。
测试文件打开状态:
ifstream infile;
infile.open(“test.txt”);
if(!infile){
cerr<<”error”;
exit(0);
}
2.4 若干重要的C++特性
强制类型转换
C++增加4种新的强制类型转换:
static_cast const_cast dynamic_cast reinterpret_cast
C语言:average=(float)hits/5
static_cast:average= static_cast<float>hits/5
const_cast: 将指向常数对象的指针转变为指向非常数对象的指针
dynamic_cast用于继承层次中的类型转换。
reinterpret_cast可用来改变指针类型
常数
C++中的const变量能在任何常数可以出现的地方使用。
const是一个左结合的类型修饰符。
如const位于星号左侧,就是用来修饰指针所指向的向量,即指针指向为常量;const在变量声明符的位置无关。
如const位于星号右侧,const就是修饰指针本身,即指针本身是常量。
数据类型bool
枚举类型
声明一个枚举类型:
enum status{single,married};
status person1,person2;
定义变量
结构
C++中struct不需要出现在结构变量定义的地方,C++ struct除了包含数据成员还可包含函数。包含数据成员和函数的实体称为类。
2.5 string类型
C++提供string类型代替C语言地以null结尾的char类型数组,需包含头文件string。程序员无需关心存储的分配,也无需处理繁杂的null结束字符。
定义string类型的变量
string s1;
string s2=”Bravo”;
string s3=s2;
string s4(10,’x’);
转换为C风格的字符串
函数c_str将返回指向一个const的null结尾的char类型数组的指针。
string s=”test.txt”;
ifstream infile;
infile.open(filename.c_str());
字符串长度
函数length返回一个字符串的长度。
读写string
操作符<<输出string。
操作符>>输入string,默认忽略空格,然后读取并存储字符直到文件结束或遇到另外一个空格,任何空格都不存储。
赋值
赋值操作符=可用来进行string类型字符串的赋值。
字符串的连接
操作符+和+=可用来进行字符串的连接。
修改字符串
函数erase从字符串中删除一个淄川。第一个参数是需要删除的子串的开始位置,第二个参数是子串的长度。字符串第一个字符的索引为0。
函数insert在某个string字符串的指定位置插入另一个字符串,第一个参数给出插入位置,第二个参数给出要插入的字符串。
函数replace用一个指定的字符串来代替一个子串,第一个参数给出将要替代的子串的首位字符的索引,第二个参数说明子串有多少字符,第三个参数是要替代子串的字符串。
函数swap调换两个字符串。
操作符[]可用来访问特定索引位置的字符。
提取子串
函数substr返回一个子串,第一个参数是子串首位字符的索引,第二个参数是子串的长度。
查找
函数find用来在一个字符串中查找一个子串。
s1.find(s2,ind)
第二个参数默认为0,如果s2在s1中的位置大于或等于ind,则find返回大于或等于ind的索引值,如无s2则返回无穷大。
字符串比较
操作符==,!=,<,<=,>和>=都可用来进行字符串的比较。
2.6 函数
函数原型
函数原型体现了函数声明的风格,它指的是函数头以及函数头中包含的参数列表。
mian函数
引用
引用通过&来标记,用来为存储器提供别名,&在此不是求地址运算,而是起标识作用。
类型标识符是指目标变量的类型。
代码:
int x;
int& ref =x;//声明引用时必须同时对其进行初始化
分配了一个int单元,它拥有两个名字:x和ref,引用名是目标变量的别名,它本身不是一种数据类型,因此引用本身不占存储单元。
x=3或ref=3都将3存到该int单元。
不能建立数组的引用,因为数组是一个由若干元素所组成的集合,所以无法建立一个数组的别名。
可以将一个引用赋给某个变量,如int n=ref;//n具有被ref引用的变量x的值
可以将指针p指向x变量的地址,如:int *p=&ref
指针通过地址间接访问某个变量,而引用是通过别名直接访问某个变量。
引用调用(引用作为参数)
如果我们用&指定一个函数参数为引用参数,将获得引用调用。在引用调用中,引用参数将实际的实参传给函数,而不是实参的一个拷贝。C++默认地调用方式都是传值调用。
引用返回
当函数返回一个值时:return expression;
expression被求值,并将该值拷贝到临时存储空间,以便函数调用者访问。我们将这种返回方式称为传值返回。
引用返回的返回值不再拷贝到临时存储空间,甚至连return语句所用的那个存储单元对调用者而言都是可访问的。
内联函数
函数默认参数
C++允许程序员在函数声明中以常数形式为函数参数指定默认值。如果在调用函数时不提供这个参数,则将使用这个默认值代替。
赋予缺省值的参数必须放在形参表列中的最右端。
不能同时使用重载函数和缺省参数的函数。
函数重载
指同一个函数名可以对应多个函数的实现。
通常用来处理具有相似行为而数据类型不同的操作提供一个通用的名称。
C++要求重载的函数具有不同的签名。
函数签名
C++要求重载的函数具有不同的签名。函数签名包括函数名和参数的个数、数据类型和顺序。为保证函数的惟一性,函数必须拥有独一无二的签名。
2.7 new和delete操作
在C++程序中不要使用C存储管理函数,因为这些函数与new、delete不同,它们不能正确的使用C++中一些重要的技术,比如构造函数和析构函数。
2.8 例外处理
例外是由运行期错误导致的异常情况。在C++中,一个函数能够识别里外并通告例外的发生。这种通告机制称为抛出例外。例外抛出后,可以由函数f的调用者捕捉并进行处理,例外的捕捉借助catch程序块调用的函数f。catch程序块位于try程序块之后,是一个例外捕捉器。try程序块用来指示希望捕捉什么例外。