1、数据抽象:
对抽象数据类型设计步骤:类型名描述-类型操作(初始化即构造,清理即析构,复制,转换)-类型接口-实现类型
explicit关键字作用:
由于单参数构造函数其本身就默认了一个隐式转换,而explicit就是来抑制这种隐式转换的,例:
Cap hour=12;
即为:
Cap temp(12); hour(temp);
2、多态
首先代码:
AmOption *d = new AmOption;
Option *b = d;
d->price(); 调用AmOption::price();
b->price(); 同上面调用
本质上类似于语法习惯:
第一句理解为:那个美国期权的当前值是什么?(美国类似于AmOption)
第二句理解为:那个期权的当前值是什么?(仍然说的是美国期权)
代码中操作,如果代码中出现一个AmOption对象,我们只需要知道Option多态代码就可以操作AmOption对象了。
3、STL
基本思想就是:容器与容器之间无需彼此了解,通过迭代器(类似于指针)实现。
指针:
int i=1;
int *p =&i; &取地址,*p指向引用指针变量值
cout <<*p<<endl;解引用
同样,迭代器也可以对其解引用。学习了STL库后,觉得很有必要大范围使用。
4、引用是别名而非指针
引用是现有对象的别名。用对象来初始化引用后,对象的名字或者引用的名字都可以指向该对象。
引用和指针的区别:
1、不存在空引用。
2、所有引用必须初始化。(初始化的对象必须存在!!)
3、一个引用永远指向初始化的那个对象。
注意:
1、一个非常量的引用是不可以用字面值或者临时值初始化,如
double &d = 12.3; //错误
2、一个指向常量的引用可以,如:
const double &d = 12.3;//正确
5、数组形参:
注意:C++中不存在数组形参,数组传入时,只是传入其首元素的指针。
例1:
void average(int ary[]); //形参为ary,是一个int *
void average(int (&ary)[12]); //形参同样是数组,含有特定数量元素(12个):
例2:
void average(int (&ary)[n]);
||
void avergae(int ary[], int size); //size即为n,为数组个数
例3:
void process(int (*ary)[20]); //一个指针,指向含有20个int元素的数组
例子4:(二维数组)
template<int n,int m>
inline void process(int (&ary)[n][m])
{ process_2d(&ary[0][0], n, m);}
void process_2d(int *a, int n,int m)
{
for(int i=0; i<n; ++i)
for(int j=0; j<m; ++j)
a[i*m+j]= 0;
}