《C++面向对象程序设计(第4版)》学习笔记-2

在这里插入图片描述

此份笔记建议在完整阅读郑莉老师、董渊老师、何江舟老师所编写的《C++语言程序设计(第4版)》后食用,风味更佳!
最后,由于本人水平有限,笔记中仍存在错误但还没有被检查出来的地方,欢迎大家批评与指正。


第2章 C++简单程序设计

2.1 C++语言概述

2.1.1 C++的产生

2.1.2 C++的特点

2.1.3 C++程序实例

2.1.4 字符集

  • 字符集是构成C++语言的基本元素。
  • 用C++语言编写程序时,除字符型数据外,其他所有成分都只能由字符集中的字符构成。

在这里插入图片描述

2.1.5 词法记号

  • 词法记号是最小的词法单元
1.关键字

在这里插入图片描述

2.标识符

C++标识符的构成规则:

  • 以大写字母、小写字母或下划线(_)开始。
  • 可以由以大写字母、小写字母、下划线(_) 或数字 0 ~ 9 组成。
  • 大写字母和小写字母代表不同的标识符。(对大小写敏感)
  • 不能是 C ++ 关键字。
3.文字
  • 在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。
4.操作符(运算符)
  • 用于实现各种运算的符号
5.分隔符
  • 用于分隔各个词法记号或程序正文
  • 分隔符有
    • ( ) { } , : ;
6.空白

在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。

  • 空白是空格、制表符( Tab 键产生的字符)、垂直制表符、换行符、回车符和注释的总称。
  • 空白符用于指示词法记号的开始和结束位置。

2.2 基本数据类型和表达式

2.2.1 基本数据类型

基本数据类型 = 修饰词 + bool/整数/浮点数

在这里插入图片描述

1.关于整型
  • short int = short
  • long int = long
2.各种数据类型的大小关系

ISO C++ 标准并没有明确规定每种数据类型的字节数和取值范围 ,它只是规定它们之间的字节数大小顺序满足的关系

     (signed/unsigned) char \leq (unsigned) short \leq (unsigned) int \leq (unsigned) long

3.关于基本数据类型默认符号的问题
  • int 型(包括 short、long)默认是有符号的
  • char 型默认情况下,有、无符号因编译环境而异
    • char、unsigned char、signed char是三种不同的数据类型

2.2.2常量

所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。

1.整性常量
  • 整型常量即以文字形式出现的整数,包括正整数、负整数和零。
  • 整型常量的表示形式有十进制、八进制和十六进制。
  • 由于八进制和十六进制形式的整型常屋一般用来表示无符号整数,所以前面不应带正负号。
  • 后缀
    • 整型常量可以用后缀字母 L(或 l )表示长整型,后缀字母 U (或 u )表示无符号型。
    • 这两个后缀可以同时使用。
2.实型常数
  • 实型常量即以文字形式出现的实数
  • 实数有两种表示形式
    • 一般形式:12.5、-12.5
    • 指数形式:0.345E+2(表示 0345 × 1 0 2 0345\times10^2
  • 实型常量默认为 double 型,如果后缀 F (或 f )可以使其成为 float 型。
3.字符常量
  • 字符常量是单引号括起来的一个字符,例如:‘a’,‘D’,’?’
  • 另外还有一些字符是不可显示字符,也无法通过键盘输入,例如响铃、换行、制表符、回车等。对于这些字符常量, C ++ 提供一种称为转义序列的表示方法来表示这些字符。

在这里插入图片描述

  • 无论是不可显示字符还是一般字符,都可以用十六进制或八进制 ASCII 码来表示。
4.字符串常量
  • 字符串常量简称字符串,是用一对双引号括起来的字符序列。
  • 例如:“I’m happy!”、“China”
  • 字符串与字符是不同的,它在内存中的存放形式是:按串中字符的排列次序顺序存放,每个字符占一个字节,并在末尾添加 '\0’作为结尾标记。

在这里插入图片描述

5.布尔常量
  • false
  • true

2.2.3 变量

1.声明变量与定义变量的区别
  • 声明一个变量只是将变量名标识符的有关信息告诉编译器,使编译器“认识”该标识符,但是声明并不一定引起内存的分配。
  • 而定义一个变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应内存单元的命名。
2.变量的存储类型

变量除了具有数据类型外,还具有存储类型。

变量的存储类型决定了其存储方式

存储类型具体有:

  • auto 存储类型: 采用堆栈方式分配内存空间,属于暂时性存储 ,其存储空间可以被若干变量多次覆盖使用。
  • register 存储类型: 存放在通用寄存器中。
  • extern 存储类型: 在所有函数和程序段中都可引用。
  • static 存储类型: 在内存中是以固定地址存放的 ,在整个程序运行期间都有效。

2.2.4 符号常量

1.常量声明的语法
const 数据类型说明符 常量名=常量值;
//或
数据类型说明符 const 常量名=常量值;
  • 符号常量在声明时一定要赋初值,而在程序中间不能改变其值。

2.2.5 运算符与表达式

运算符具有优先级与结合性。

当一个表达式中包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。

所谓结合性是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。

1.算术运算符与算术表达式
  • 算术运算符包括基本算术运算 符和自增自减运算符。
  • 由算术运算符、操作数和括号构成的表达式称为算术表达式。
int i=1;
cout << i++;  //输出1,i=2
cout << ++i;  //输出3,i=3
2.赋值运算符与赋值表达式
  • 最简单的赋值运算符就是"="
  • 带有赋值运算符的表达式被称为赋值表达式。
3.逗号运算和逗号表达式
表达式1,表达式2
//求解顺序为先求解表达式1再求解表达式2,最终结果为表达式2的值。
a=3*5,a*4    //a=60
4.逻辑运算和逻辑表达式

(1)关系运算符与关系表达式

  • 用关系运算符将两个表达式连接起来,就是关系表达式。
  • 关系表达式是一种最简单的逻辑表达式 ,其结果类型为 bool,值只能为 true 或 false。
  • 关系运算符及其优先次序如下:

在这里插入图片描述

(2)逻辑运算和逻辑表达式

  • 若只有简单的关系比较是远不能满足编程需要的,我们还需要用逻辑运算符将简单的关系表达式连接起来,构成较复杂的逻辑表达式。
  • 逻辑表达式的结果类型为 bool,值只能为 true 或 false。
  • 逻辑运算符及其优先次序如下:

在这里插入图片描述

  • “&&” 和 “||” 运算符具有"短路” 特性。
    • 对于 “&&” 运行时先对笫一个操作数求值 ,如果其值为 false , 则不再对笫二个操作数求值。
    • 类似地,对于“||” ,运行时先对笫一个操作数求值 ,如 其值为 true , 则不再对笫二个操作数求值。
5.条件运算符与条件表达式
  • C++ 中唯一的一个三元运算符
表达式1? 表达式2: 表达式3
  • 其中,表达式 1 必须是 bool 类型,表达式 2 、3 可以是任何类型,且类型可以不同。
  • 条件表达式的执行顺序:先求解表达式 1。若表达式 1 的值为 true , 则求解表达式 2,表达式 2 的值为最终结果;若表达式 1 的值为 false , 则求解表达式 3,表达式 3 的值为最终结果。
6.sizeof 运算符
  • sizeof 运算符用千计算某种类型的对象在内存中所占的字节数。
sizeof (类型名)
//或
sizeof 表达式     //“表达式”的结果类型所占的字节数
  • 这个计算过程中,并不对括号中的表达式本身求值。
7.位运算

(1)按位与(&)

  • 按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。

(2)按位或(|)

  • 按位或操作的作用是将两个操作数对应的每一位分别进行逻辑或操作。

(3)按位异或(^)

  • 按位异或操作的作用是将两个操作数对应的每一个位进行异或。

(4)按位取反(~)

  • 按位取反是一个单目运算符,其作用是对一个二进制数的每一位取反。

(5)移位

  • 左移运算 <<
    • 低位补 0
    • 高位舍弃
  • 右移运算 >>
    • 低位舍弃
    • 高位
      • 无符号位,则高位补 0
      • 有符号位,则高位补符号位或补 0
8.运算符优先级与结合性

在这里插入图片描述

9.混合运算时数据类型的转换
9.1 隐含转换

(1)在算术运算和关系运算中

  • 在算术运算和关系运算中如果参与运算的操作数类型不一致编译系统会自动对数据进行转换(即隐含转换)。
  • 隐含转换是安全的,因为在转换过程中数据的精度没有损失。
  • 转换的基本原则:将低类型数据转换为高类型数据
    • 类型越高,数据的表示范围越大,精度也越高。

在这里插入图片描述

(2)在逻辑运算中

  • 逻辑运算符要求参与运算的操作数必须是 bool 型,如果操作数是其他类型,编译系统会自动将其转换为 bool 型。
  • 转换规则:非 0 数据转换为 true , 0 转换为 false

(3)在位运算中

  • 位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,编译系统也会自动进行类型转换,转换时会遵循上表中列出的隐含转换的规则。

(4)在赋值运算中

  • 赋值运算要求左值(赋值运算符左边的值)与右值(赋值运算符右边的值)的类型相同,若类型不同,编译系统会自动进行类型转换。
  • 转换规则:一律将右值转换为左值的类型
9.2 显示转换

(1)显式类型转换的作用是将表达式的结果类型转换为另一种指定的类型。

(2)语法

类型说明符(表达式)    //C++语言风格
//或
(类型说明符)表达式    //C语言风格

(3)注意

  • 这种转换可能是不安全的。
  • 这种转换是暂时的、一次性的。

猜你喜欢

转载自blog.csdn.net/Jason3633/article/details/91294256