编程语言(C++)学习的指导思想:
Focus on programming techniques, not on language features.
2.1 C++设计思想
(1)能提供用户接口成员函数
(2)只有通过用户接口才能访问数据privite
(3)初始化、扫尾重构,虚构函数
(4)用户代码与实现代码隔离封装
2.2 数据抽象,类继承OOP的基本思想
(1) 作者首先通过“栈”的例子引出使用继承的好处:实现在基类中不定义成员变量,使用户与数据更好的隔离开来;在通过“形状shape类”的例子说明,使用继承的机制,可以通过派生类来定义不同的形状,方便用户根据实际需求来定义形状,即可继承基类的好方法,还能自己添加其他特性
(2) 用含有虚函数的类定义的对象,都有虚函数表,该表的地址位于对象空间的顶部;
(3) 数据抽象,貌似就是用户可以自己定义运算符的功能(比如让+号不在做加法)
C++程序,通常分为3个文件:类声明(XXX.h),类实现(XXX.CPP),使用类(main)。这种分成三个文件进行编译并不是C++的做法,而是模块化程序的设计方法。
一定要通过成员函数来完成对类中功能的监测。例如:设计一个stack类,要通过成员来监测栈是否溢出,而不是通过用户代码来判断栈是否溢出。
让某项数据操作(补足一个字符串)支持标注的数据操作,才是比较完美的。如:字符串支持“+”操作,str1 + str2。写一个成员函数也可以实现str1 + str2,但这种用函数来实现功能并不是好的做法。数据抽象:就是让用户能对自己定义的对象使用标准的操作(+、-)。通过这种“"数据抽象"的方式,可以让加号做的不在是加法!
为了将用户与数据更好的隔离开,类中(这里指基类)不要定义局部变量。不定义成员变量,成员函数怎么实现数据交互?解决方法:定义一个不含成员变量的基类,其他派生类中在定义成员变量!
每个含有虚函数的类都有它的虚函数表,这应该是编译器内部自己实现的。
花功夫去为基类寻找类间的共性是很有必要的。
范型是用模板(见笔记1)来实现的,用模板定义好一个类后,往这个类中填入不同类型的变量,都能适应。
CH3 Tour of Standand Library
1、cin遇到空格会默认结束字符串,getline()不会。cin无法获取空格字符
2、容器:vector, list, map
vector:顺序存储,占用连续存储空间,可随机访问其中元素
list:双向列表存储,只能顺序访问,但随机插入效率较高
map:成对存放关键字/值的list容器
3、迭代器(iterator)是容器和算法(操作)之间的一座桥梁;比如可以通过迭代器来对向量容器排序...迭代器就类似指针!