#C++ Primer Plus# 第三章 处理多少

  • 面向对象编程(OOP)的实质:设计并扩大自己的数据类型
  • 放到C++数据类型
C++数据类型
  • 标识存储的多少的艺术:使用变量
  • C++中的算术运算
  • C++中的类型转换

3.1 简单变量

音讯囤积的多少个为主品质:

  • 音讯将积存在何地
  • 要存储什么值
  • 积存何种类型的音讯

3.1.1 变量名

C++变量命名规则:

  • 在称呼中不得不选择假名字符、数字和下划线(_)
  • 名称的率先个字符不可能是数字
  • 不相同轻重缓急写字符
  • 永不选用C++关键字作为名称
  • 以三个下划线或下划线和大写字母打头的名称将被保存给落到实处(编译器及其应用的资源)使用。以一个下划线先导的名号被保留给落到实处,用作全局标识符(名称被声称的义务)
  • C++对于名称的尺寸没有界定,名称中有着的字符都有意义,但有点平台有长度限制。(ANSI
    C只保险名称中的前63个字符有含义)

两个单词组成名称的拍卖方法:

  • 动用下划线字符分开单词(C程序员惯用)
  • 从第三个单词伊始首字母大写(Pascal程序员惯用)

3.1.2 整型

  • 言语只可以表示所有整数的一个子集
  • 不相同C++整型使用差别的内存量来囤积整数,使用的内存量越大,可代表的平头范围就越大

3.1.3 整型short、int、long、long long

  1. C++确保这么些品种的小不点儿长度:

    • short至少16位
    • int至少与short一样长
    • long至少32位,且至少与int一样长
    • long long至少64位,且至少与long一样长
  2. 位:总计机内存的为主单元,每一位都有0/1三种可能。

  3. 字节:8位的内存单元。

  4. C++字节:由至少可以容纳已毕的着力字符集的相邻位组成,即可能的取值数目必须等于或当先字符总数。在应用ASCII码的系统中,一个字节表示8位;在利用Unicode的连串中,一个字节表示16或32位。

  5. short是short int的简称,long是long int的简称

  6. sizeof运算符再次回到类型或变量的长短,对品种名,将名称放在括号中;对变量名,括号是可选的。eg:sizeof(int); sizeof n_short;

  7. 头文件climits定义了代表各个限制的符号名称,比如 INT_MAX

  8. #define INT_MAX 32767
    #define是一个预处理器编译指令,它寻找独立的token(单独的单词),跳过嵌入的单词,进行交流

  9. 变量初始化的二种艺术:

    • int owls = 101; // 来自C语言
    • int wrens(432); // C++方式
    • int hamburgers = {24};
      //C++11先河化格局,用于数组或协会,也可用来单值变量
  10. C++11早先化方式

    • int a{2};//a=2
    • int b = {3};//b=3
    • int c{};//c=0
    • int d = {};//d=0

C++11驱动可将大括号起先化器用于此外类型(可以利用等号,也可以不应用),那是一种通用的初叶化语法。

3.1.4 无标志类型

  1. 亮点:增大变量可以存储的最大值
  2. 应用:使用紧要字unsigned(unsigned int的缩写)
  3. 杰出的整型溢骑行为
典型的整型溢出行为

3.1.5 选用整型类型

  1. int被装置为目标统计机的本来长度(natural
    size,指的是电脑处理起来功效最高的尺寸)
  2. 即使没有卓殊有说服力的理由,则选取int
  3. 比方变量表示的值无法为负,则动用无符号类型
  4. 若果知道或者代表的整数值大于16位证书的额最大可能值,则利用long
  5. 假使存储的值操作20亿,则动用long long
  6. 当有大型整型数组或节省里存很要紧时才使用short

3.1.6 整型字面值

  1. 十进制:第三位是1~9
  2. 八进制:第二位是0
  3. 十六进制:前两位是0x或0X
  4. 虽说有两样的象征方法,不过都将以同一的艺术(二进制数)
    存储在计算机中
  5. 控制符oct或hex,实际上是一条音讯,告诉cout选取何种行为

int a = 10;
//输出八进制
cout <<oct
 <<a;
//输出十六进制
cout <<hex
 <<a;

3.1.7 C++怎么样确定常量的档次

  1. 唯有有理由(使用相当后缀或者值太大)存储为其他连串,否则默认将整型常量存为int
  2. 先是看后缀
    • long:l/L后缀
    • unsigned int:u/U 后缀
    • unsigned long:ul/uL/Ul/UL后缀
    • long long 和 unsigned long long 同理
  3. 其次看长度
    • 对于不带后缀的十进制整数的考虑顺序:int 、long、long long
    • 对于不带后缀的十六进制或八进制整数的考虑顺序:int、unsigned
      int、unsigned long、long long、unsigned long long

3.1.8 char类型:字符和小整数

  1. 存储字母:通过字母的数值编码解决难点
  2. char用来拍卖字符,也可以用做比short更小的整型
  3. cin和cout的转折作用:根据变量类型,输入和出口字符类型
  4. C++对字符使用单引号,对字符串使用双引号
  5. cout.put(字符常量/字符变量) 函数
    • 成效:突显一个字符
    • 是ostream的一个成员函数,句号是成员运算符
    • 正史原因:cout在C++Release
      2.0事先,cout将字符变量展现为字符,而将字符常量突显为数字
  6. char字面值
    • 健康字符:使用单引号括起
    • 老大规字符(比如单引号):使用转义字符(\)转义,可以应用数字转义系列或字符转义种类(比如
      \0x8和\b都意味着退格)
  7. 通用字符名
    • C++协理一个基本的源字符集,即可用来编写源代码的字符集
    • C++标准还同意已毕提供伸张源字符集和扩大执行字符集
    • C++提供一种表示特殊字符的建制,独立于其余特定的键盘,使用通用字符名(universal
      character name)
    • \u + 8个十六进制位
    • \U + 16个十六进制位
  8. signed char和unsigned char
    • char在默许处境下既不是有记号也不是尚未标记的,是还是不是有号子由C++完毕控制
    • signed char范围-128~127,unsigned char范围0~255
  9. wchar_t
    • 解决的标题:程序需求处理的字符集不可以运用一个8位的字节表示
    • 焚薮而田办法1:要是大型字符集是落实的主旨字符集,那么编译器厂商可以将char定义为一个16位字节或者更长的字节
    • 化解措施2:使用wchar_t
      (宽字符类型),底层的连串取决于C++完毕,可能是unsigned
      short或int等
    • wcin和wcout可以拍卖wchar_t流
    • 添加前缀L来提示宽字符常量和宽字符串(如,L”tall”)
  10. C++ 11新增项目:char16_t 和 char32_t
    • 化解的标题:Unicode的推广,对一定长度和标志特征的类型的须求,而wchar_t随达成而差距
    • 运用前缀u指示char16_t,无符号,长16位
    • 行使前缀U提醒char32_t,有符号,长32位

3.1.9 bool类型

  1. C++将非零值解释为true,将零解释为false
  2. 其余数字值或指针值都就可以被隐式转换为bool值

3.2 const限定符

标志常量的意味:

  • 名称首字母大写
  • 全部名称大写
  • 使用前缀k
  • ……

如若表明常量时没有提供值,则该常量的值将是不确定的,且无法修改的。

const较#define的优点:

  • 可见明确指定项目
  • 可以用利用C++的功能域规则将定义限定在一定的函数或文件中
  • 可以将const用于复合类型

ANSI C和C++中const的区别:

  • 效用域规则
  • C++中可以用const值注脚数总经理度

3.3 浮点数

小数,带小数部分的数字,分两部分存储,一部分表示值,另一有些代表缩放因子(用来移动小数点的职位)。

3.3.1 书写浮点数

  1. 标准小数点表示法
  2. E表示法
    • d.dddE+n代表将小数点向右移动n位
    • d.dddE-n代表将小数点向坐移动n位

E表示法

3.3.2 浮点类型

  1. C++有3中浮点类型:float、double、long double
  2. 代表:有效数位+允许的指数最小范围
  3. 实惠位(significant figure):数字中有意义的位
  4. 可以查看头文件cfloat获取系统对浮点数的限制

3.3.3 浮点常量

  1. 默许意况下为double类型
  2. 一旦希望常量为float类型,请使用f或F后缀
  3. 若果指望为long double,可使用l或L后缀

3.3.4 浮点数的优缺点

  1. 能够代表整数之间的值
  2. 是因为有缩放因子,可以象征更大范围的的数
  3. 浮点运算速度慢,精度低

3.4 C++算术运算符

3.4.1 运算符优先级和结核性

  1. 仅当七个运算符被用来同一操作数时,优先级和结合性规则才使得
  2. C++使用优先级规则来规定第一利用哪个运算符
  3. 可以使用括号来执行自己定义的先行级
  4. 当八个运算符优先级相同时,C++看操作数的结合性是从左到右仍旧从右到左

3.4.2 除法分支

除法运算符(\)的一坐一起取决于操作数的品类

除法运算符的作为取决于操作数的门类

3.4.3 求模运算符

求模运算符(%):再次来到整数除法的余数

3.4.4 类型转换

机动类型转换的情状:

  • 将一种算术类型的值赋给另一种类型的变量
  • 表明式中富含分化的品种
  • 将参数传递给函数时

#1:初叶化和赋值举办的变换

转换 潜在的问题
将较大的浮点类型转换为较小的浮点类型,比如double转float 精度降低;当值超出范围时,结果不确定
将浮点型转为整型 小数部分丢失;当值超出范围时,结果不确定
将较大的整型转为较小的整型,如long转short 当值超出范围时,通常只复制右边的字节

#2:以{}格局开始化(列表伊始化)时进行的更换(C++11)

列表开头化不一样意缩窄

#3:表明式中的转换

自动转换 不同类型运算时转换
– bool、(unsigned)char、short 自动转为 int,因为int类型是计算机的自然类型<br />- 若short比int短,则unsigned short被转为int;若长度相同,则unsigned short被转为unsigned int<br />- wchar_t被转换成下列第一个宽度足够存储其取值范围的类型:int、unsigned int、long和unsigned long 1. 按下列顺序,当有一个类型符合,则另一个操作数将被转换成同一类型:long double>double>float <br />2. 整型提升<br />3. 比较有无符号和操作数的级别

#4:传递参数时的转换

  1. C++对char和short类型应用整型提高
  2. 将参数传递给废除原型对参数传递控制的函数时,C++将float参数提高为double

#5:强制类型转换

  1. 强制类型转换不会转移变量本身,而是创造一个新的、指定项目标值
  2. 强制类型转换格式
    • (typename) vlaue //C Style
    • C语言,typename (vlaue) //C++ Style,似乎函数调用一般
  3. static case<typename> value //更严格的类型转换

3.4.5 C++11中的auto声明

  • 让编译器按照伊始值的档次臆想变量的档次
  • 貌似用来拍卖千丝万缕类型,比如STL中的类型