以下内容均总结自C++ Primer Plus,详细内容可参考原书,描述不当的地方欢迎指正!
目录
第二章
第二章主要是对简单C++程序进行介绍,包括以下几个部分:
1.main函数的介绍:main函数是程序的入口,通常main函数被启动代码调用,启动代码是由编译器添加到程序中的,是程序和操作系统之间的桥梁。
2.函数的简单介绍:函数由函数头和函数体组成。函数头包指出函数返回类型和函数参数,函数体包含函数具体实现的代码。
3.C++语句:声明语句、赋值语句、函数调用、函数原型(声明函数的返回类型、函数接受的参数数量和类型)、返回语句
4.cin和cout:它们是istream和ostream类的实例,在iostream文件中定义。cin和cout是只能对象,能够根据程序的上下文自动将信息从一种形式转换为另一种形式。还可以重新定义<<运算符,使得cout能够识别和显示所开发的新型数据类型
5.#include是预处理器编译指令,例如#include <iostream>,预处理器将iostream文件的内容添加到程序中,原始代码并不会被修改,而是将源代码和iostream组合成一个复合文件,编译的下一阶段将使用该文件
第三章 处理数据
1.简单变量:
- C++变量名的命名规则:
·变量名只能包含字母、数字和下划线
·变量名不能以数字开头
·不能将关键字用作变量名称
·以两个下划线或下划线和大写字母开头的名称被保留给实现(编译器及其使用的资源)使用;以一个下划线开头的名称被保留给实现,用作全局标识符
- short、int、long和long long
short至少为2字节;int至少与short一样长,通常为4字节;long至少为4字节,且至少与int一样长;long long至少为8字节,且至少与long一样长,可通过sizeof确定类型长度
- 运算符sizeof和头文件limits
·可对类型名和变量名使用sizeof,其中对类型名使用时,应将名称放在括号中;对变量名使用可以不用括号。例如:
cout << sizeof ( int ) ;
cout <<sizeof a;/cout << sizeof(a);
·在头文件climits中定义了符号常量来表示类型的限制,例如INT_MAX定义为2147483647,还有INT_MIN、UINT_MAX、CHAR_BIT等符号常量:
在climits中包含类似#define INT_MAX 2147483647的语句行,#define和#include一样,也是一个预处理器编译指令,该指令告诉预处理器,把程序中所有INT_MAX都替换为2147483647。也可以使用#define来定义自己的符号常量。
- 整型类型的选择:
int被设置为对目标计算机而言最为“自然”的长度,自然长度指的是计算机处理起来效率最高的长度,没有其他特殊情况,一般选择使用int
当变量的值不可能为负时,可以选择使用unsigned类型,这样变量的表示范围更大。
如果要存储的值超过20亿,可使用long long。
- 整型字面值及对应输出:
C++可以用十进制、八进制和十六进制来书写整数。C++使用前一位来表示数字常量的基数,若第一位为1~9,则为十进制数(如93);若第一位为0,第二位为1~7则为八进制数(如042);若以0x开头则为十六进制数(如0x2f)。
cout默认以十进制格式输出整数,可以利用控制符dec、hex和oct分别指示cout以十进制、十六进制和八进制格式显示整数。例如:
int a=42;
cout<<a<<endl;//十进制(42)
cout<<hex;
cout<<a<<endl;//十六进制(0x2a)
cout<<oct;
cout<<a<<endl;//八进制(52)
2.const限定符
const限定了声明的含义,它的格式为const type name = value;
应在声明中对const进行初始化。
const和#define的对比:
首先,const能够明确指定类型。其次,可以使用C++的作用域规则将const定义限定在特定的函数或文件中。第三,可以将const用于更复杂的类型。
3.浮点数
- 书写方式:有两种,一种是标准小数点表示(如3.14,C++中默认情况下该表示为double类型,若希望表示为float类型,可使用f/F后缀3.14f,long double类型则使用l/L后缀);另一种是E表示法(如3.45E6,表示3.45*10^6,3.14E-6,表示3.14*10^(-6))
- 浮点类型:float,double,long double;通常,float为32位,double为64位,long double为80、96或128位,这三种类型的指数范围至少是-37~37
4.运算符重载
使用相同的符号进行多种操作叫做运算符重载,C++中右一些内置的重载示例,还允许扩展运算符重载,以便能够用于用户定义的类。
5.类型转换
- 将一种算术类型(整型和浮点型统称为算术类型)的值赋给另一种算术类型时,C++将对值进行转换
- 将参数传递给函数时,对值进行转换
- 表达式中包含不同类型的值时将进行转换
首先看初始化和赋值进行的转换:
C++允许将一种类型的值赋给另一种类型的变量,在赋值的时候会将之转换为接收变量的类型。
例如:a的类型为long,b的类型为short,当程序执行a=b时,会先将b扩展为long的值,再将这个扩展后的新值存储在a中,而b的内容不变。
再比如:
float a=3.86;
int b=a;
这里b的值会变为3,这是因为C++中将浮点型转换为整型时采取的是截断的方式,它是向下取整而非四舍五入。
再来看C++11以列表初始化方式(即使用{}进行初始化)初始化时进行的转换:
列表初始化不允许变窄,即变量的类型可能无法表示赋给它的值。例如不允许将浮点型转换为整型,因为浮点型的表示范围要比整型大,将浮点型转换为整型可能会出现该值超出了整型的表示范围的情况。
接着是表达式的转换:
先看两种自动转换:
①在计算表达式时,C++将bool、char、unsigned char、singed char和short转换为int,这些转换称为整型提升。
②当运算涉及两种类型时,较小的类型将被转换为较大的类型
除了自动转换,C++还运行通过强制类型转换机制显示地进行类型转换:
如(long) thorn / long(thorn)
强制类型转换不会修改thorn本身,而是创建一个新的、指定类型的值,可在表达式中使用这个值。
C++引入了4个强制类型转换运算符,对它们的使用要求更严格。其中static_cast<>可用于将值从一种数值类型转换为另一种数值类型,使用格式为:
static_cast<typename> (value)
6.auto声明
C++11新增了此工具,让编译器能够根据初始值的类型推断变量的类型。在初始化声明中,如果使用auto关键字而不指定类型,编译器会根据你的设置的初始化的值为变量设置类型。当变量的类型声明较为复杂的时候,可以考虑使用auto声明该变量,操作更方便。