关于输入结束,详见读入未知数目的输入(输入非整数结束)
变量和基本类型
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; //definition
8.非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::