第一部分:预备知识
第一章:C++回顾
1.3异常:
try块处理,catch块用来捕捉异常,catch块的参数的类型,决定了catch块捕捉异常的类型
特别的,要是参数为exception,则可以捕捉基类别exception,以及exception派生出来的所有类别。
要是参数为 . . . 那么就可以捕捉所有的异常。
1.4动态存储空间分配
① new操作符用来进行动态存储分配和运行时存储分配,其值为一个指针,指向所有分配空间。
操作流程为,先声明一个指针,再用为这个指针用new操作,如:int *y; y = new int; new将分配出来空间的指针返回给y,则y只是表示整数所在的地址,而*y才是整数本身。
int *y = new int(10); ==== int *y = new int; *y = 10;(因为y本身是一个地址,要想在地址中写数,就要用*)
②一维数组:
由于编译时数组大小未知,所以要采用动态分配内存的方法:我们这样做:
数组一定要声明为一个浮点型指针,然后分配足够的空间:float *x = new float[n]; new将为数组分配大小为n的空间,并将第一个元素所在位置返回给x。
③异常处理:
如果内存没有足够的空间来为数组分配空间,那么new操作就不会分配任何内存,而是抛出一个类型为bad_alloc的异常。
④delete操作:
动态分配的内存,不要了就要释放掉: 释放变量: delete y; 释放数组 :delete []x;
⑤二维数组:
二维数组作为形参时,列数必须为已知量。
可以在已知列数的情况下,用new来分配空间: char(*c)[5]; try{c= new char[n][5];} catch(bad_alloc){cerr<<"Out of memory"<<endl; exit(1);}如果事先不知道数组的列数,那么想仅调用一次new来创建二位数组是不存在的,即便行数已知都不行。只能先构造一个表示行的一位数组,然后用表示列的一位数组依次对应每个行。
char **x;
释放:先释放每行的数组,再释放表示列的数组。delete [] x[i]; delete [] x;
1.5自有数据类型:
public中声明的是用来对类进行操作的成员函数,对于类的用户是可见的,是用户与类对象进行交互的唯一手段。
private中声明的是用户不可见的 数据成员和成员函数。
构造函数(constructor):在类中,函数名和类名一样的函数是构造函数。其指明了创建一个类对象的方法,而且没有返回值。
创建类对象的方法有两种:1、currency f, g(plus,3,34), h(minus,10)
2、currency *m = new currency(plus,8,12) (note:用new构造的任何东西,都要放在一个指针变量里)
析构函数(destructor):在类名前加上~的函数,是析构函数,
常量函数(用const声明的):不会改变调用对象的值
函数返回引用:将一个引用返回给调用函数的环境中,这样不用复制。
作用域说明符(scope resolution opearor ) : : 如currency::currency表示类currency的构造函数。
note:1、在定义浮点数的时候,如果只写5.21,计算机保存的值可能比5.21小,可能是5.20998,只要在后面加上一个0.001,这样5.20998+0.001 = 5.21098,这样就对了。
2、在定义类的时候,在类中,只要声明成员函数就行,具体成员函数的定义,可以在后面用作用域说明符帮忙说明 如currency::add(...){.....},就是对currency中add函数的定义。
3、在C++中 *this 的作用就好像Python中的self一样。
+++++++++++++++++++++++++以上是2018年3月8日所写+++++++++++++++++++++++++++++++++++