首页 > 编程语言 > 详细

C++ Primer Plus学习:第三章

时间:2016-03-11 20:24:19      阅读:258      评论:0      收藏:0      [点我收藏+]

C++入门第三章:处理数据

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

内置的C++数据类型分为基本类型和复合类型。

基本类型分为整数和浮点数。

复合类型分为数组、字符串、指针和结构。

C++通过使用变量来存储数据。

  1. 简单变量

为把信息存储在计算机中,程序必须记录三个基本属性:

  • 信息将存储在哪里
  • 要存储什么值
  • 存储何种类型的信息

1 变量名

C++提倡使用一种有含义的变量名。在命名变量时必须遵守以下规则:

  • 在名称中只能使用字母字符、数字和下划线。
  • 名称的第一个字符不能是数字。
  • 区分大写字母和小写字母。
  • 不能将C++关键字作为名称。
  • 以两个下划线和下划线和大写字母大头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
  • C++对名称的长度没有限制,名称中所有的字符都有意义,但有些平台长度有限制。

最后一点和C99标准中有所不同,C99标准只保证名称的前63个字符有意义。

2 整型

整型有shortintlonglong long四种类型。

注:VC++6.0不支持long long

  • short至少16位;
  • int至少与short一样;
  • long至少32位,且至少与int一样长;
  • long long 至少64位,且至少与long一样长。

不同的操作系统int的长度是不同的。

要知道系统中整型的最大长度,可以在程序中使用C++工具进行检查,sizeof可以实现该功能,sizeof返回到的是类型或变量的(字节)长度。

Climits(老式:limits.h)包含了关于整型限制的信息。

climits中的符号变量:

符号常量

表示

CHAR_BIT 

char的位数

CHAR_MAX 

char的最大值

CHAR_MIN 

char的最小值

1)变量的初始化:

C++11中变量的初始化方式(可用于数组和结构,C98中也可用于单值变量):

int ham={24};

或者可以是:

int emus{7}

或者也可以是:

int roc={}; //roc=0

2)无符号整数

unsigned intunsigned shortunsigned longunsigned long long

先说明变量数值越界的问题:

例:

exceed.cpp

//测试有符号整数和无符号整数越界(上溢或下溢)时的情况。

#include<iostream>

using namespace std;

int main(void)

{

short a; //a为有符号整数

unsigned b; //b为无符号整数

a=0;b=0;

cout<<"a为有符号整数,b为无符号整数。"<<endl;

cout<<"本操作系统中无符号整数最大为:"<<USHRT_MAX<<endl;

cout<<"a=0,b=0"<<endl;

a=a-1;

b=b-1;

cout<<"a-1为:"<<a<<endl;

cout<<"b-1为:"<<b<<endl;

a=SHRT_MAX; //a为有符号整数的最大值

b=a;

cout<<"a为有符号整数,b为无符号整数。"<<endl;

cout<<"本操作系统有符号整数最大为:"<<SHRT_MAX<<endl;

cout<<"a= SHRT_MAX,b= SHRT_MAX"<<endl;

a=a+1;

b=b+1;

cout<<"a+1为:"<<a<<endl;

cout<<"b+1为:"<<b<<endl;

return 0;

}

windows7SP132位系统中使用VC++6.0运行得到的结果如下:

技术分享

注:C++确保了无符号类型的这种行为,但C++并不保证符号整型超越限制的不出错。

3)选择整型类型

C++中提供了大量的整型。如没特殊情况,应选择int型,使用此类型时计算机的处理效率最高。

若变量的值为非负,则可采用无符号型。

若变量的最大可能值超过16wei位,使用long,若超过20亿,使用long long

若使用大型数组且存储的值小于16位,使用short

4)整型字面值

C++支持三种计数方式:十进制(decimal)、八进制(octal)、十六进制(hexadecimal)

  • 第一位为1~9,为十进制。
  • 第一位为0,第二位为1~7,为八进制。
  • 前两位为0x0X,为十六进制。

另外,cout定义了控制符dechexoct来指示cout以十进制、十六进制和八进制格式显示整数。

例:displaydechexoct.cpp

//使用cout控制符显示整数的十进制、十六进制和八进制形式。

#include<iostream>

using namespace std;

int main(void)

{

int a=42; //定义十进制的a

cout<<"使用不同的形式表示整数。"<<endl;

cout<<dec; //设定以十进制形式显示整数

cout<<"a="<<a<<"(十进制形式)"<<endl;

cout<<hex; //设定以十六进制形式显示整数

cout<<"a="<<a<<"(十六进制形式)"<<endl;

cout<<oct; //设定以八进制形式显示整数

cout<<"a="<<a<<"(八进制形式)"<<endl;

return 0;

}

5) C++确定常量类型的方法

int16位,long32位的系统上,20000int型,40000long型,3000000000long long型。

通过后缀也可确定常量的类型,l,L代表long型;ll,LL代表long long型;还有ull,ULL,ul,lu,LU,UL等。通常使用大写,以免l1混淆。

6char类型:字符和小整数

char是专为存储字符而设计的。char是另一种整型。他足够长,能够表示计算机系统中所有的基本符号。

在美国,最常用的字符集是ASCII字符集。

C++使用的是其主机系统的编码——例如IBM大型机使用EBCDIC编码。

C++支持的宽字符类型可以存储更多的值,如国际Unicode字符集使用的值。

  • 成员函数cout.put()

函数cout.put()是一个重要的C++OOP概念——成员函数的一个例子。

类定义了如何表示和控制数据。成员函数归类所有,描述了操纵类数据的方法。

比如说类ostream有一个put()成员函数用来输出字符。只能通过类的特定对象(比如cout对象)来使用成员函数。要通过对象来使用成员函数必须通过句点(.)将对象名和函数名称(put())连接起来。句点被称为成员运算符。cout.put()表示通过类对象cout来使用函数put()

  • char字面值(转义字符)

每个字符有对应一个ASCII值。

有些字符不能很直接通过键盘输入到程序中。例如回车。同时双引号不能包含在字符串中。为此,C++提供了一种特殊的表示方法——转义序列。

下表中列出了一些转义序列的编码:

字符名称

ASCII符号

C++代码

十进制数

换行符

NL(LF) 

\n 

10 

水平制表符

HT 

\t 

9 

垂直制表符

VT 

\v 

11 

退格

BS 

\b 

8 

回车

CR 

\r 

13 

振铃

BEL 

\a 

7 

反斜杠

\ 

\\ 

92 

问号

? 

\? 

63. 

单引号

\‘

39 

双引号

"

\"

34 

例:

escapecharacter.cpp

//使用转义字符

#include<iostream>

using namespace std;

int main(void)

{

long passwords1,passwords2;

cout<<"测试密码程序。"<<endl;

cout<<"请输入密码:________\b\b\b\b\b\b\b\b"<<endl; //使用转义字符

cin>>passwords1;

cout<<"请再次输入密码:________\b\b\b\b\b\b\b\b"<<endl; //使用转义字符

cin>>passwords2;

if (passwords1==passwords2)

cout<<"输入一致。"<<endl;

else

cout<<"输入不一致!!"<<endl;

return 0;

}

通用字符名

C++使用通用字符名表示特殊字符。用法类似转义字符。

通用字符名使用\u\U打头。其中\u后接8个十六进制位,\U后接16个十六进制位。这些为表示的是ISO 10646码点。

如果若用的实现支持扩展字符,则可在标识符和字符串中使用通用字符名。

例:

int k\u00F6rper;

cout<<"Let them eat g\u00E2teau.\n";

注:VC++6.0不支持扩展字符。

  • signed char unsigned char

在默认情况下,char既不是有符号的,又不是无符号的。

但如果将char作为数值型来看待,signed char unsigned char的差异就很重要了。signed char表示的范围为-128~127unsigned char 表示0~255

  • wchar_t为宽字符类型
  • bool类型

C++新标准中加入了bool类型。他有两个预定义字面值:truefalse

例:bool is_ready=true

bool可转化成整型,true=1false=0

反过来,整型也可以转化成bool型,非零:true,零:false

注:VC++6.0不支持bool型。

2 const限定符

C++处理符号常量的办法:使用const定义。

例:const int Month=12;

const可以定义整型和浮点型等多种数据类型的符号常量。

这样就可以在程序中使用常量Month了。

常量如果被初始化后,其值是固定的,是无法修改的,若未给其赋值,则其值是位置的也是不可改变的。

常量的标记方法:

  • 首字母大写:Month
  • k打头:kmonth
  • 其他……

3 浮点数

C++第二种基本数据类型:浮点数。浮点数能够用来表示带小数部分的数字。

计算机分两部分来存储浮点数。一部分用来表示值,一部分进行方法和缩小。如:34.1=0.341*100;真正的存储是以二进制进行缩放的。

  • 浮点数的书写

浮点数的书写有两种格式。

第一种为常用的标准小数法:

12.34-1010.121-0.0000001

第二种为E表示法:

2.14e+125.12E-12

eE均为可选的。

  • 浮点类型

C++有三种浮点类型:floatdoublelong double

有效位数的要求:float至少32位。double至少48位,且不少于float。这三种类型的有效位数可以一样多。

通常时,float32位,double64位,long double8096128位。另外,这3种类型的指数范围至少是-3737

注:cout显示时会删除结尾的0显示。

浮点常量

后缀加fF

默认是double型。

4 C++算数运算符

C++提供了五种基本算数计算:加法、减法、乘法、除法和求模。每种计算均有两个操作数。

注:如果除法的两个操作数均为整数,则为整除。

求模的两个操作数必须均为整数,否则会报错。

类型转换

C++自动进行的类型转换:

  • 将一种算术类型的值付给另一种算数类型的变量时,C++将对值进行转换。
  • 表达式中包含不同的类型时,C++将对值进行转化。
  • 表达式中包含不同的类型时,C++将对值进行转化。
  • 将参数传递给函数时,C++将对值进行转换。

数值转换可能出现的问题:

转换

问题

较大浮点类型转化成较小的浮点类型,double变成float

有效位数降低,值会超出目标类型的取值范围,则值是未知的。

浮点型转化成整型

小数部分丢失,原来的值超出目标值的取值范围,结果不确定。

较大整型转化成较小整型

通常会超过目标类型的取值范围,只复制右边的类型。

使用{}的初始化时的转换(C++11

它对类型的转化比较严格,不允许缩窄。即不允许变量的类型无法表示赋给它的值。

表达式中的转换

自动转化:在计算表达式时,C++bool,char,unsigned char,signed char,short转化为int。此过程也被称为整型提升。

例:

short a=1;

short b=2;

short c=a+b;

计算过程:程序取得a,b的值后,将他们转化成int型,最后再将结果转化成short型。

C++表达式中的转化通过查阅校验表进行修改。

C++11的校验表如下:

  • 如果有一个操作数的类型是long double,则另一个操作数转化成long double
  • 如果有一个操作数的类型是double,则另一个操作数转化成double
  • 如果有一个操作数的类型是float,则另一个操作数转化成float
  • 若操作数均为整数,进行整形提升。
  • 在这种的情况下,两个操作数均为有符号的或者是无符号的,且其中一个比另一个低,则转化为级别高的。
  • 如果一个操作数有符号的,另一个操作数是无符号的,无符号的操作数级别比有符号的高,则有符号的操作数转化成无符号的操作数所属的类型。
  • 否则,有符号类型能够表示无符号类型的所有可能取值,则将无符号操作数转化成有符号操作数所属的类型。
  • 否则,将两个操作数都转化成有符号类型的无符号版本。

整型级别:

从高到低:long longlongintshortsigned char

charintshortsigned char等级相同。

强制类型转换

两种方式:

(typename) value;

typename (value);

第一种为C语言,第二种为C++

C++ Primer Plus学习:第三章

原文:http://www.cnblogs.com/xyb930826/p/5266851.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!