虽然,有一定的c++基础(因为本科就学会了这一种,哈哈),但是还是决定系统的读一遍这本书(之前有零星看过数次。。汗)。
留作自己以后参考。(内容会不定期更改,不断学习(此处应为长音~~))
大部分都是自己掌握的不够扎实的地方和以前没有注意的一些细节。
书中好多地方,详述了知识出现的缘由,最起码是指出为了解决什么问题而出现的!!
前言部分
1.“...大量使用了前后交叉引用..."(挺适合自己的,我想知道原文是怎么的,希望以后有机会对原版的时候补充~)
2.作者对本书的定位是本指南性读物。。。
3.作者假定读者已经掌握了一种现代结构化语言!
4.学到足够的知识去创建自己的抽象(于第三到第五部分讨论)
快速入门部分
1.‘操作系统通过main函数返回的值来确定程序是否成功执行完毕。’
2.IDE (Integrated Development Environment) 集成开发环境(书中不介绍~~)
3.注释comment
4.读入未知数目的整数输入(利用 输入操作符>> 返回其左操作数实现)
#include "stdafx.h" #includeusing namespace std; int main() { int sum=0,value; while(cin>>value) sum+=value; cout< 关于输入结束,详见读入未知数目的输入(输入非整数结束)
变量和基本类型
1.基本字符集(char)
扩展字符集(wchar_t)
2.整型(integral type):表示整数、字符和布尔值的算术类型的合称
3.字面值规则
20 0240X14
20L 20UL 20FL(F单精度)
科学计数法
字符串字面值:为了兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。(类型:const char类型的数组)
4.转义字符 \***
5.初始化(创建变量并赋值) 赋值(擦除对象的当前值并用新值代替)
int a = 10;copy-initialization 更灵活且效率更高
int a(10);direct-initialization
6.构造函数(constructor)定义如何进行初始化的成员函数。(可以有多个)
PS:(P43第二小节末一句有点小瑕疵,可以这样理解)有多个初始化参数时不能使用复制初始化。
7.定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。
声明(declaration)用于向程序表明变量的类型和名字 extern
int i; //declares and defines i extern int i; //declares but does not define i extern int i = 1; //definition8.非const变量默认为extern。const变量默认时是定义该变量的文件的局部变量。
int i; //全局变量 const int i = 1; //文件的局部变量 extern const int i = 1; //const定义时必须初始化(const变量默认时是定义该变量的文件的局部变量。)why?允许const变量定义在头文件中。见13
const变量定义时必须初始化!(利用定义只有一次,达到不能修改的目的)
可以用const对象初始化非const对象,反之亦然。因为初始化复制了初始化式的值。
9.引用(reference)就是它绑定对象的另一个名字。引用返回左值。主要用作函数的形式参数。
a reference must be initialized, and initializer must be an object.
当引用初始化后,只要引用存在就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。
复合类型(compound type 用其它类型定义的类型)(注:不能定义引用类型的引用)
10.typedef可以用来定义类型的同义词
typedef的目的之一:一种类型用于多个目的时,使得每次使用该类型的目的明确。
PS :本书部分翻译确实不太准确,虽然我还没看原版,但是感觉是酱紫的。。
11.枚举enumeration:解决数值的相关联问题。
枚举成员值可以是不唯一的。
每个enum都定义一种唯一的类型。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其它对象来进行!
12.class和struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public;class的成员为private。
13.头文件(header file)不应该含有定义!
三个例外:类、(值在编译时就已知道的)const对象、inline函数。
原因:编译器需要知道他们的定义来生成代码。
const对象定义在头文件中时,必须是用常量表达式初始化的const对象!ps:后续章节-const对象定义在头文件中(待完善)
14.#include设施是C++预处理器(preprocessor)的一部分。
#include指示只接受一个参数:头文件名。预处理器用指定的头文件的内容替代每个#include。
15.头文件保护符(header guard),用于避免在已经见到头文件的情况下重新处理该头文件的内容。(实际就是防止多重定义)
预处理器指示 #ifndef #define #endif预处理器变量:有两种状态(已定义和未定义)。不能用预处理器变量给自定义的变量命名(如 a=NULL //error)。
标准库类型
1.抽象数据类型ADT(abstract data type)
2.头文件中应该只定义确实必要的东西。
使用完全限定的标准库名字,即不要using声明。(因为包含头文件的程序也会有此using声明,不管其是否需要)
3.字符串字面值与标准库string类型不是同一种类型。
4.读入未知数目的string对象
string word; //read until end-of-file, writing each word to a new line while(cin >> word){ cout <5.读入未知数目的行
6.不要把string的size操作的返回值赋值给一个int变量!(其返回值为:string::size_type类型,不返回int类型的目的是machine-independent)
保存一个string对象size的最安全的方法就是使用标准库类型string::size_type。
string对象的索引变量最好也用string::size_type类型。
7.标准库类型尽量设计得和基本数据类型一样方便易用。
8.string库类型的赋值操作:释放原内存,分配新内存,复制。
9.C标准库头文件命名形式为name.h,而C++版本的此头文件的命名形式为cname(c表示这个头文件源自C标准库)。例cctype和ctype.h
通常,C++程序应该采用cname这种头文件的版本。
10.vector对象动态增长
11.vector对象的size,返回相应vector类定义的size_type的值。
vector::size_type //ok vector::