您的位置:首页 > 编程语言 > C语言/C++

【读书笔记:C++ primer plus 第六版 中文版】第3章:数据处理

2015-06-21 11:07 489 查看
转载请注明出处:/article/1366533.html

本章内容包括:

C++变量的命名规则.

C++内置的整型 unsigned long,long,unsigned int,int,unsigned short,short,char,unsigned char,signed char和bool.

C++11新增的整型:unsigned long long和long long.

表示各种整型的系统限制的climits文件.

各种整型的数字字面值(常量).

使用const限定符来创建符号常量.

C++内置的浮点类型:float,double和long double.

表示各种浮点类型的系统限制的cfloat文件.

各种浮点类型的数字字面值.

C++的算术运算符.

自动类型转换.

强制类型转换.

面向对象编程OOP的本质是设计并扩展自己的数据类型.

内置的C++类型分两组:基本类型和符合类型.

3.1 简单变量

3.1.1 变量名

C++提倡使用有一定含义的变量名.

必须遵循几种简单的C++命名规则:

在名城众只能使用字母字符,数字和下划线(_).

名称的第一个字符不能是数字.

区分大写字符与小写字符.

不能将C++关键字用作名称.

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

C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制.

3.1.2 整型

3.1.3 整型short,int,long和long long

C++提供了一种灵活的标准,它确保了最小长度(从C语言借鉴而来),如下所示:

short至少16位

int至少与short一样长;

long至少32位,且至少与int一样长;

long long至少64位,且至少与long一样长.

实际上,short是short int的简称,而long是long int的简称,但是程序设计者们几乎都不使用比较长的形式.

1.运算符sizeof和头文件limits

可对类型名或变量名使用sizeof运算符.对类型名(如:int)使用sizeof运算符时,应将名称放在括号中;对变量名使用该运算符,括号是可选的.

头文件climits定义了符号常量来标识类型的限制.

C++有一种更好的创建符号常量的方法:关键字const,所以不会经常使用#define.

2.初始化

警告:如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的.这意味着该变量的值将是它被创建之前,相应内存单元保存的值.

3.C++11初始化方式

C++11使得可将大括号初始化器用于任何类型(可以使用等号,也可以不使用),这是一种通用的初始化语法.

3.1.4 无符号类型

只需使用关键字unsigned来修改声明即可;注意unsigned本身是unsigned int的缩写.

3.1.5 选择整型类型

通常,int被设置为对目标计算机而言最为”自然”的长度.自然长度指的是计算机处理起来效率最高的长度.

3.1.6 整型字面值

C++能够以三种不同的计算方式来书写整数:基数为10,基数为8(老式UNIX版本)和基数为16(硬件黑客的最爱).

3.1.7 C++如何确定常量的类型

3.1.8 char类型:字符和小整数

虽然char最常被用来处理字符,但也可以将它用做比short更小的整型.

程序清单3.6,morechar.cpp

成员函数cout.put()

句点被称为成员运算符.

char字面值

提示:在可以使用数字转移序列或符号转移序列(如\0x8和\b)时,应使用符号序列.数字表示与特定的编码方式(如ASCII码)相关,而符号表示适用于任何编码方式,其可读性也更强.

程序清单3.7,bondini.cpp

注意:有些基于ANSI C之前的编译器的C++系统不能识别\a.对于使用ASCII字符集的系统,可以用\007替换\a.有些系统的行为可能有所不同,例如可能将\b显示为一个小矩形,而不是退格,或者在退格时删除,还可能忽略\a.

通用字符名

请注意:C++使用术语”通用编码名”,而不是”通用编码”

signed char和unsigned char

wchar_t

这种类型与另一种整型(底层(underlying)类型)的长度和符号属性相同.对底层类型的选择取决于实现,因此在一个系统中,它可能是unsigned short,而在另一个系统中,则可能是int.

cin和cout将输入和输出看作是char流,因此不适于用来处理wchar_t类型.iostream头文件的最新版本提供了作用相似的工具—wcin和wcout,可用于处理wchar_t流.另外,可以通过加上前缀L来指示宽字符常量和宽字符串.

C++11新增的类型:char16_t和char32_t

类型char16_t与/u00F6形式的通用字符名匹配,而类型char32_t与/U0000222B形式的通用字符名匹配.

前缀u和U分别指出字符字面值的类型为char16_t和char32_t.

3.1.9 bool类型

过去,C++和C一样,也没有布尔类型.C++将非零值解释为true,将零解释为false.

true被转换为1,而false被转换为0;另外,任何数字值或指针值都可以被隐式转换(即不用显示强制转换)为bool值.任何非零值都被转换为true,而零被转换为false.

3.2 const限定符

一种常见的做法是将名称的首字母大写;另一种约定是将整个名称大写;还- 有一种约定是以字母k打头;等等其他约定…

创建场梁的通用格式:const type name = value;

应在声明中对const进行初始化

ANSI C也是用const限定符,这是从C++借鉴来的.区别之一是作用域规则;另一个主要区别是,在C++(而不是C)中可以用const值来声明数组长度.

3.3 浮点数

计算机将浮点数这样的值分成两部分存储.一部分表示值,另一部分用于对值进行放大或缩小.

3.3.1 书写浮点数

记住:d.dddE+n指的是将小数点向右移n位,而d.dddE~n指的是将小数点向左移n位.之所以称为”浮点”,就是因为小数点可移动.

3.3.2 浮点类型

和ANSI C一样,C++也有3种浮点类型:float,double和long double.

事实上,C和C++对于有效为数的要求是,float至少32位,double至少48位,且不少于float,long double至少和double一样多.这三种类型的有效位数可以一样多.然而,通常float为32位,double为64位,long double为80,96或128位.另外,这3种类型的指数范围至少是-37到37.可以从头文件cfloat或float.h中找到系统的限制.

注意:有些C++实现尚未添加头文件cfloat,有些基于ANSI C之前的编译器的C++实现没有提供头文件float.h

程序清单3.8 floatnum.cpp

程序说明

通常cout会删除结尾的零.

3.3.3 浮点常量

对于long double类型,可使用l或L后缀,如:2.2L

3.3.4 浮点数的优缺点

程序清单3.9 fltadd.cpp

注意:有些基于ANSI C之前的编译器的老式C++实现不支持浮点常量后缀f.如果出现这样的问题,可以用2.34E+22代替2.34E+22f,用(float)1.0代替1.0f.

将类型分类:C++对基本类型进行分类,行程了若干个族.类型signed char,short,int和long统称为符号整型;他们的无符号版本统称为无符号整型;C++11新增了long long.bool,char,wchar_t,符号整数和无符号整型统称为整型;C++11新增了char16_t和char32_t.float,double和long double统称为浮点型.证书和浮点型统称算法(arithmetic)类型.

3.4 C++算术运算符

记住:对于float,C++只保证6位有效位.

3.4.1 运算符优先级和结合性

3.4.2 除法分支

注意:如果编译器不接受setf()中的ios_base,请使用ios.

预算富重载简介:使用相同的符号进行多种操作叫做运算符重载.C++有一些内置的重载示例.C++还与允许扩展运算符重载,以便能够用于用户定义的类.

3.4.3 求模运算符

3.4.4 类型转换

为处理潜在的混乱,C++自动执行很多类型转换:

将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换;

表达式中包含不同的类型时,C++将对值进行转换;

将参数传递给函数时,C++将对值进行转换.

1.初始化和赋值进行的转换

程序清单3.13 assign.cpp

2.以{}方式初始化时进行的转换(C++11)

C++11将使用大括号的初始化称为列表初始化,因为这种初始化常用语给复杂的数据类型提供值列表.具体的说,列表初始化不允许缩窄,即变量的类型可能无法表示赋给它的值.

3.表达式中的转换

有符号整型按级别从高到低依次为long long,long,int,short和signed char.无符号整型的排列顺序与有符号整型相同.类型char,signed char和unsigned char的级别相同.类型bool的级别最低.wchar_t,char16_t和char32_t的级别与其底层类型相同.

4.传递参数时的转换

传递参数时的类型转换通常由C++函数原型控制.

5.强制类型转换

两种方式:(long)thorn;和long(thorn);强制类型转换不会修改thorn变量本身,而是创建一个新的,制定类型的值,可以在表达式中使用这个值.

强制转换的通用格式:(typeName)value或typeName(value)

3.4.5 C++11中的auto声明

让编译器能够根据初始值的类型推断变量的类型.如果使用关键字auto,而不制定变量的类型,编译器将把变量的类型设置成与初始值相同;

3.5 总结

3.6 复习题

3.7 编程练习

附件:本章源代码下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: