-
C++的历史发展
带类的C,1983正式取名C++,2011年发布第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。2014年公布C++14。
-
C++的特点
兼容C,支持面向过程的程序设计,支持,面向对象的方法,支持泛型程序设计方法。
-
命名空间
避免命名冲突。
std是C++标准库的命名空间(namespace)名。
using namespace std表示打开std命名空间。
-
C++字符集
大小写英文字母:A~Z,a~z
数字0~9
特殊字符:
-
词法记号
关键字:C++预定义的单词
标识符:程序员声明的单词,它命名程序正文中的一些实体。
空白符:空格、制表符(tab键产生的字符)、垂直制表符、换行符、回车符和注释的总称。
-
标识符的构成规则
由大写字母、小写字母或下划线开头。
由数字、字母或下划线组成。
大写字母和小写字母代表不同的标识符。
不能是C++关键字或操作符。
-
基本数据类型、常量、变量
整数类型、浮点数类型、字符类型、布尔类型
常量的值在整个程序运行期间不可改变。
基本整数类型:int
按符号分为signed和unsigned;按照数据范围分为short、long、long long
字符类型char,实际上存储的也是整数。
浮点数类型:float、double、long double
字符串类型:字符串常量
基本类型中没有字符串变量。
采用字符数组存储字符串(C风格的字符串)。
标准C++类库中的String类(C++风格的字符串)。
-
各基本类型的取值范围
浮点常量默认为double型,后缀加f可以成为float型。
-
C++转义字符列表
-
C风格字符串常量
一对双引号括起来的字符序列;
在内存中按串中字符的排列次序顺序存放,每个字符占一个字节;
在末尾添加 ‘\0’ 作为结尾标记。
例如:“China”——>c h i n a \0
'a'——>a
"a"——>a \0
-
通过添加前缀可以改变字符常量或者字符串常量的类型,含义如下表:
-
C++语言中提供了多种初始化方式
int a = 0;
int a(0);
int a = {0};
int a{0};
其中使用大括号的初始化方式称为列表初始化,列表初始化时不允许信息的丢失,例如用double值初始化int变量时就会造成数据丢失。
-
符号常量
const 数据类型说明符 常量名=常量值
const float PI=3.1415926;
const double pi(3.14159);
符号常量在定义时一定要初始化,在程序中间不能改变其值。
-
逗号运算符
-
关系运算与关系表达式
关系运算的优先级为:
关系表达式是一种最简单的逻辑表达式,其结果类型为 bool,值只能为 true 或 false。
-
逻辑运算与逻辑表达式
优先级:
逻辑运算结果类型:bool,值只能为 true 或 false
-
条件运算符与条件表达式
表达式1?表达式2:表达式3
表达式1 必须是 bool 类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。
条件运算符优先级高于赋值运算符,低于逻辑运算符
-
位运算
按位与(&);按位或(|);按位异或(^);移位(<<、>>)
左移运算(<<):左移后,低位补0,高位舍弃。
右移运算(>>);右移后,低位舍弃;高位:无符号数:补0,有符号数:补“符号位”。
-
数据类型的转换——显式转换
显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。
类型说明符(表达式)
(类型说明符)表达式
类型转换操作符<类型说明符>(表达式)
类型转换操作符可以是:const_cast、dynamic_cast、reinterpret_cast、static_cast
例如:int(z), (int)z, static_cast<int>(z)三者完全等价。
-
数据的输入输出
I/O流: 在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被建立,使用后要被删除。
数据的输入与输出是通过I/O流来实现的,cin和cout是预定义的流类对象。cin用来处理标准输入,即键盘输入。cout用来处理标准输出,即屏幕输出。
从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。
-
预定义的插入符和提取符
“<<”是预定义的插入符,作用在流类对象cout上便可以实现项标准输出设备输出。
cout << 表达式 << 表达式...
标准输入是将提取符作用在流类对象cin上。
cin >> 表达式 >> 表达式...
提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。例如:
int a, b;
cin >> a >> b;
-
常用的I/O流类库操纵符
操纵符名 含义
dec 数值数据采用十进制表示
hex 数值数据采用十六进制表示
oct 数值数据采用八进制表示
ws 提取空白符、
endl 插入换行符,并刷新流
ends 插入空字符
setsprecision(int) 设置浮点数的小数位数(包括小数点)
setw(int) 设置域宽
例如:cout << setw(5) << setprecision(3) << 3.1415;
-
switch语句
switch (表达式)
{ case 常量表达式 1:语句1
case 常量表达式 2:语句2
┆
case 常量表达式 n:语句n
default : 语句n+1
}
case分支可包含多个语句,且不用{ }。
表达式、判断值都是int型或char型。
如果若干分支执行内容相同可共用一组语句。
-
while语句
while (表达式) 语句
-
for语句
for语句的另一种形式:范围for语句:
for (声明:表达式)
语句
-
自定义类型
类型别名:为已有类型另外命名
typedef 已有类型名 新类型名表
例如:
typedef double Area, Volume;
typedef int Natural;
Natural i1,i2;
Area a;
Volume v;
using 新类型名 = 已有类型名;
using Area = double;
using Volume = double;
-
枚举类型
将全部可取值一一列举出来。
enum 枚举类型名 {变量值列表};
enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT};
默认情况下
SUN=0,MON=1,TUE=2,......,SAT=6
-
C++包含两种枚举类型:
不限定作用域枚举类型:enum 枚举类型名 {变量值列表};
限定作用域的enum类。
不限定作用域枚举类型说明: 枚举元素是常量,不能对它们赋值。
enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT};
不能写赋值表达式:SUN = 0
枚举元素具有默认值,它们依次为: 0,1,2,......。
也可以在声明时另行指定枚举元素的值,如:
enum Weekday{SUN=7,MON=1,TUE,WED, THU,FRI,SAT};
枚举值可以进行关系运算。
整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
枚举值可以赋给整型变量。
-
auto类型与decltype类型
auto:编译器通过初始值自动推断变量的类型。
例如:auto val = val1 + val2;
如果val1+val2是int类型,则val是int类型;
如果val1+val2是double类型,则val是double类型。
decltype:定义一个变量与某一表达式的类型相同,但并不用该表达式初始化变量
例如:decltype(i) j = 2