龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

《C++ primer plus》读书笔记(一)

时间:2014-10-17 02:11来源:网络整理 作者:网络 点击:
分享到:
本读书笔记是C++ primer plus(第六版)前3章的学习笔记。非常的浅显易懂,复习C++基础知识的可以瞄瞄。

第一章

1、预处理器——#include<iostream>将iostream文件内容添加到程序中。老式C头文件保留了扩展名.h,而C++头文件没有扩展名。

(有些C头文件被转换为C++头文件,去掉扩展名,并在前面加c,如cmath)

2、名称空间——相当于Java中的package,using编译指令相当于Java中的import。头文件没有.h前缀时,类、函数和变量是C++编译器的标准组件,被放置在名称空间std中。

3、类的本质——类是用户定义的一种数据类型。类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。

4、main()——main()的返回值(退出值)是返回给操作系统。通常退出值为0意味着程序运行成功。

第二章

5、OOP——面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配。

6、标识符——以一个下划线开头的名称被保留给实现,作全局标识符;以两个下划线或下划线加大写字母的名称被保留给实现(编译器及其使用的资源)使用。

(C++对名称长度没有限制)

7、整型——short至少16位;int至少和short一样;long至少32位,且至少和int一样长;long long至少64位,且至少和long一样长。

8、字节——字节通常指8位的内存单元,而C++中的字节依赖于实现。

9、运算符——运算符是内置的语言元素。sizeof运算符返回类型或变量的长度(字节)。所以,不同系统中sizeof( int )的返回值可能不同。

10、头文件climits——定义了各种表示类型限制的符号常量。如:#define INT_MAX 32767。(被设计为C可用的头文件,符号常量必须用#define编译指令定义)

11、变量初始化——

  函数内部定义的变量,应该在定义的时候进行初始化,否则它的值是不确定的,为被创建前相应的内存单元保存的值。

  (1)、int a = 1;  //  传统的C初始化

  (2)、int b(2);  //  C++的新方式

  (3)、int c = {3} 或 int c{3}  //  C++的大括号初始化器用于任何类型(大括号内不包含任何东西时,变量的初始化为0)

12、int——计算机处理起来效率最高的长度。除非使用后缀或值太大,C++通常将整形常量存储为int类型。

13、wcha_t——是整形类型,有足够的空间表示系统使用的最大扩展字符集。使用 iostream 中的 wcin 和 wcout 处理wcha_t流。

  可以通过前缀L来指示宽字符常量和宽字符串,如 wcha_t a = L'p';  wcout << L"tall" << endl;

  (C++11新增类型 char16_t 和 char32_t ,都是无符号的,分别长16位和32位,使用前缀 u 表示前者,前缀 U 表示后者)

14、bool——C++将0解释为 false ,将非零解释为 true 。

15、const——创建常量时最好马上赋值,如cont int a = 5;常量通常将首字母大写。

16、浮点——float至少32位;double至少48位,且不少于float;long double 至少和double一样多。这三种类型的指数范围至少是-37-37。

  (1)、cout.setf()可以控制输出格式,迫使cout使用定点表示法。因为cout通常会删除浮点后面的0,如3.3300000显示为3.33。

  (2)、浮点常量通常为double类型,通常用后缀f或F指定float类型,用后缀l或L指定long double类型。

17、强制类型转换——

  如:(long) thorn  或  long(thorn)

  强制类型转换不会修改thorn本身,而是创建一个新的、指定类型的值。

  也可以这样:  static_cast<long> (thorn)  ,它比传统的强制类型转换更为严格。

18、auto——自动推断类型,关键字auto可以不指定变量的类型,编译器自动把变量的类型设置成与初始值相同,如 auto a = 100;

  不过,auto一般是用于处理复杂类型

第四章

19、数组——

  (1)、声明数组的通用格式:  typeName arrayName[arraySize]  ,如 int a[5];

  (编译器不会检查使用的下标是否有效。)

  (2)、如果没有初始化函数中定义的数组,其元素的值为以前驻留在该内存中的值。(与函数中的变量一样)

  (3)、sizeof 作用与数组名时,得到的是整个数组中的字节数。作用于元素时,得到的是该元素的字节数。

  (4)、只有定义数组时才能初始化,之后就不行了。可以部分初始化,如:int a[5] = {1,2},部分初始化时,编译器把其他元素设置为0。

  可以这样:  int b[] = {1,2,3,4,5};  让编译器计算元素个数。

  (5)、使用列表初始化数组时,可以省略等号(=);大括号内不包含任何内容时,默认所有元素为0;列表初始化禁止缩窄转换。

20、字符串——

  字符串是存储在内存的连续字节中的一系列字符。

  (1)、C-风格的字符串以空字符结尾,其ASCII码为0,如:  char dog[7] = {'a','b','c','d','e','f','\0'};  注意,数组长度必须计算‘\0'  

  (2)、字符串常量,如:  char cat[] = "cat";

  (注意!'S'代表字符常量,而"S"表示‘S'和‘\0'两个字符组成的字符串,“S”实际表示的是字符串所在的内存地址)

  (3)、拼接字符串时,第一个字符串最后的‘\0'会被第二个字符串的第一个字符取代。

  (4)、strlen()函数返回存储在数组中的字符串的长度,只包括可见的字符,不包括空字符。  

  (5)、cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,所以它读取数组输入时,只读取第一个单词,并自动添加空字符。

  (6)、面向行的输入有getline()和get(),它们都通过换行符来确定输入结尾,不同的是,get()并不再读取并丢弃换行符。

  cin.getline(name,ArSize),将读取ArSize-1个字符到name数组中。对于get(),可以这样使用:  cin.get(name,ArSize).get();

  (7)、读取空行时,get()将设置失效位;如果输入行包含的字符数比指定的多,getline()会设置失效位。后面的输入将被阻断。

  (8)、允许:char c[] = {"hello world!"};

  (9)、string类具有自动调整大小的功能,因此更为安全。

  (10)、strcpy(str1,str2)将str2复制给str1,  strcat(str1,str2)将str2附加到str1的结尾。

  (11)、str1.size()和strlen(str1)的功能相同。前者是string类的一个方法,后者是一个常规函数。

精彩图集

赞助商链接