阅读笔记:
12P: <cassert>头文件,用于测试是否满足条件继续执行程序,保正程序可以正确执行例子看(37P).
23P: class Array;
{
30P: 从‘注意’开始的一段话挺重要;-!
33P: ‘一方面---’,‘另一方面---’,不理解;:-<
34p:对虚拟继承用法的使用说明 :-!
35P:protected && private的区别:希望防止派生类直接访问某成员,则用private;否则用一般可用
protected;
42P: 类模板array<elemType>需要熟练的掌握,学会template和有用的。
46P: 基于异常的设计放下没学,可以考虑和预处理一起学他们都和编译有关的。
50P: 名字空间可以不必总用他,工作时候注意一下就可以了。
}
54P class vector;(容器)
{
54P: 了解Array和vector的实现之间的区别;
学会vector的使用方法;
}
77P: C语言风格的字符串使用的时候常出现的错误,应该在编程时注意(char *p=st; *p++;)
78P: 字符串类型的功能要求和构造;
79P: 学会string的使用方法;
107P: class String;
{
109P: 对于频繁调用的小函数,将其声明为内联(inline)函数有好处。
111P: 别忘了用*this检察所赋的对象是它本身,常忘了的错误;
112P: 又出现了<cassert>的使用;
对 "<<" , ">>"的重载( 重载iostream在20.4和20.5详细讨论。)
}
117P: 子表达式的计算顺序要掌握;( &&, ||, + , -, *, / )
118P: 浮点数不可取余数;
121P: && , ||又提到了计算规则;
128P: _top++和_--top:体现了top++:先将使用当前的值,然后再把它加1.
--top:先将top减1,然后再返回减1后的top值
136P~145P: 位的操作()//待学
146p: 类型转换:
隐式转换:算术转换规则!
210P~267P: 容器的用法:(vector, list, deque, map, set)它们的属性:(insert, pop, push等操作)
容器体现了数据结构的抽象;(如 列表list;)
{
(注意: 对大型的类对象开销太大了,必须用引用!对于传递引用为了不使引用对象被不改变,必须用const保证它不变,只是被用一下。)
282P~289P:参数传递(函数参数的按值传递,引用传递和指针传递;):
1:按值传递,将实参的拷贝操作,函数结束其局部值就消失了。实参的内容不会改变。
它不适合的情况:
(1)大型的类对象必须作参数传递时,开销太大了。
(2)当实参的值必须被修改时。
2:(1)(2)可以用引用和指针传递,可以改变参数的值和它的地址;(用在主调函数返回额外值例如 函数look_up(),传递大型类对象,主意const的应用。)
3:引用和指针用哪一个?
引用必须被初始化为指向一个对象,且一旦初始化了,它就不能再指向其它对象。而指针可以.
(主意:另一方面。)如果一个参数可能在函数中指向不同的对象,或这个参数可能不指向任何对 象(如:为0),则必须使用指针参数。
引用参数的一个重要用法是,它容许在有效的实现重载操作符的同时,还能保证用法的直观性.
289P:数组参数的函数传递:
在C++中,数值和数组永远不会按值传递。它时传递第一个元素的指针。
因为数组被传递为指针,所以这对程序员有两个涵义:
(1)函数调用参数数组直接改变,改变的不是本地拷贝,所以要使实参数组保持不变,
则要保留数组的拷贝。函数可以把数组参数声明为const来表明不希望改变数组元素。
(2)数组长度要成为参数类型的附加条件或将参数声明为数组的引用(还可以使用抽象容器类型), 函数不知道传递给它的数组的实际长度,编泽器也不知道当编译器对实参类型进行参数类型检查时并不检查数组的长度,如:putvalues(int[], int size) 或putvalues(int (&arr)[10])
(3)多维数组参数类型检查检验多维数组实参中除了第一维之外的所有维的长度与参数的是否相同,所以在传递多维数组时应该把除一维以外都要声明它的长度,如:matrix[][ia];
293P:抽象容器类型参数
当容器类型的参数按值传递时容器以及全部元素都被拷贝到被调函数的本地拷贝中因为拷贝的效率非常低所以把容器类型的参数声明为引用参数比较好。
记住: 当一个函数不会修改参数的值时我们把参数声明为const 类型的引用更为合适。
如:void putValues( const vector<int> & )
298P: return:
(1) 按值传递的(passed by value) 这意味着得到控制权的函数将接收返回语句中指定的表 达式的拷贝.
(2) 一个函数可以被声明为返回一个指针或一个引用.如果返回值是一个大型类对象用引用或 指针返回类型比按值返回类对象效率要高得多.如:Matrix& grow( Matrix* p )
{ return *res};
(3) 当声明一个返回引用的函数时,
程序员应当知道下面两个易犯的错误:
<1> 返回一个指向局部对象的引用.局部对象的生命期随函数的结束而结束(局部对象的 生命期将在8.3 节讨论).在函数结束后该引用变成未定义内存的别名.(见例如。)
<2> 函数返回一个左值. 对返回值的任何修改都将改变被返回的实际对象. (见例如)
为防止对引用返回值的无意修改返回值应该被声明为const。
300p:参数和返回值与全局对象的缺点。
}
412P: 函数和类模板
1. 函数模板定义形式及参数:template<类型参数表>返回类型函数名(型参表){};
如:
template<class T1, class T2, class T3> //关键字class表示模板参数代表一个类型,
T1,T2,T3用作参数名。
void input(T1 a, T2 b, t3 c) //这部分和普通函数一样。
2. 类型参数和非类型参数:(class / typename)
如:
template<class Type> class Queue;
Queue<int, 100> Iq;
3. 初始化:
template<class Type=int, int size=1024> class Queue;
Queue<int, 100> Iq1; //类型为:int, size=100;
Queue<int> Iq2; //类型为:int, size=1024;
Queue<> Iq3; //默认int, 默认size=1024;
412P: Type min(Type (&r_array)[size])// 可以设定数组的大小;
507P:友元声明以关键字friend 开头它只能出现在类的声明中由于友元不是授权友谊的类
的成员所以它们不受其在类体中被声明的public private 和protected 区的影响,所以一般只
需把friend声明在public之前即可;
522P: this指针!!!(需要深刻理解)
~~~未完待续!~~~