处理数据
- 面向对象编程(OOP)的本质是设计并扩展自己的数据类型。
- 内置的C++类型分两组:
- 基本类型:整数和浮点型。
- 符合类型:数组、字符串、指针和结构。
简单变量
- 为把信息存储在计算机中,程序必须记录3个基本属性:
- 信息将存储在哪里。
- 要存储什么值。
- 存储何种类型的信息。
- 声明一个变量,声明中使用的类型描述了信息的类型和通过符号来表示其值得变量名。
变量名
- C++提倡使用有一定含义的变量名。
- C++命名规则:
- 在名称中只能使用字母字符、数字和下划线。
- 名称的第一个字符不能是数字。
- 区分大写字符和小写字符。
- 不能将C++关键字用作名称。
- 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
- C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。
- 如果想用两个或更多的台词组成一个名称,通常的做法是用下划线字符将单词分开。
整型
- 整数就是没有小数部分的数字,如2、98和-5286。
- 任何语言只能表示所有整数的一个子集。
- 不同C++整型使用不同的内存量来存储整数。使用的内存量越大,可以表示的整数值范围也越大。
- 有的类型(符号类型)可表示正值和负值,而有的类型(无符号类型)不能表示负值。
- C++的基本整型(按宽度递增的顺序排列)分别是
char、short、int、long和C++11新增的long long,其中每种类型都有符号版本和无符号版本。
整型short、int、long和long long
-
short至少16位。 -
int至少与short一样长。 -
long至少32位,且至少与int一样长。 -
long long至少64位,且至少与long一样长。 -
C++字节由至少能够容纳实现的基本字符集的相邻位组成。
-short是short int的简称,而long是long int的简称。 -
这4种类型(
int、short、long、long long)都是符号类型,这意味着每种类型的取值范围中,负值和正值几乎相同。 -
sizeof运算符返回类型或变量的长度,单位为字节(运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值)。 -
头文件
climits(在老式实现中为limits.h)中包含了关于整型限制的信息,具体说,定义了表示各种限制的符号名称。 -
对类型名(如
int)使用sizeof运算符时,应将名称放在括号中;但对变量名(如n_short)使用该运算符,括号是可选的。 -
头文件
climits定义了符号变量,来表示类型的限制。 -
符号常量——预处理器方式
-
#define编译指令的工作方式与文本编辑器或文字处理器中的全局搜索并替换命令相似。
-
-
初始化
- C++还有一种C语言没有的初始化语法:
int owls =101;int wrens(432);
- C++还有一种C语言没有的初始化语法:
-
C++11初始化方式
- 有一种初始化方式,这种方式用于数组和结构,但在C++98中,也可用于单值变量:
int hamburgers = {24};- 将大括号初始化器用于单值变量的情形还不多,但C++11标准使得这种情形更多了。采用这种方式时,可以使用等号
=,也可以不使用。 int rheas = {12};- 其次,大括号内可以不包含任何东西。在这种情况下,变量将初始化为零。
- 有一种初始化方式,这种方式用于数组和结构,但在C++98中,也可用于单值变量:
-
C++11使得大括号初始化器用于任何类型(可以使用等号,也可以以不使用),这是一种通用的初始化语法。
无符号类型
- 前面介绍的4种整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。
- 要创建无符号版本的基本整型,只需使用关键字
unsigned来修改声明即可:unsigned quarterback;- 注意:
unsigned本身是unsigned int的缩写。
- C++保证符号类型超越限制(上溢和下溢)时不出错,但C++并不保证符号整型超越限制时不出错。
选择整型类型
-
int被设置为对目标计算机而言最为“自然”的长度。 - 自然长度指的是计算机处理起来效率最高的长度。
整型字面量
- 整型字面量(常量)是显式的书写的常量,如212或1776。与C相同,C++能够以三种不同的方式来书写整数:
- 基数为10.
- 基数为8.
- 基数为16.
- C++使用前一(两)位来标识数字常量的基数:
- 如果第一位1~9,则基数为10;
- 如果第一位是0,第二位1~7,则基数为8;
- 如果前两位为
0x或0X,则基数为16。
- 在默认情况下,
cout以十进制格式显示整数,而不管这些整数在程序中是如何书写的。 - 若要以十六进制或八进制方式显示值,则可以使用
cout的一些特殊特性。- 控制符
hex、dec、oct,分别指示cout以十进制、十六进制和八进制显示整数。 - 诸如
cout<<hex;等代码不会在屏幕上显示任何内容,而只是修改cout显示整数的方式。
- 控制符
C++如何确定常量的类型
- 程序把1492存储为
int、long还是其他整型?-
除非有理由存储为其他类型,否则C++将整型变量存储为
int类型。 -
整数后面的
l和L后缀表示该整数为long常量,u或U后缀表示unsigned int常量。ul(可以采取任何一种顺序,大写小写均可)表示unsigned long常量。 -
C++11提供了用于表示类型
long long的后缀ll和LL,还提供了用于表示类型unsigned long long的后缀ull Ull uLL和ULL。 -
在C++中,对十进制整数采用的规划,与十六进制和八进制稍微有点不同。
- 对于不带后缀的十进制整数,将使用下面几种类型中能够存储该数的最小类型来表示:
int、long或long long。 - 对于不带后缀的十六进制或八进制,将使用下面几种类型中能够存储该数的最小类型来表示:
int、unsigned int long、unsigned long、long long、unsigned long long。
- 对于不带后缀的十进制整数,将使用下面几种类型中能够存储该数的最小类型来表示:
-
char类型:字符和小整数
-
char类型是专为存储字符(如字母和数字)而设计的。 -
char类型是另一种整型,它足够长,能够表示目标计算机系统中的所有基本符号——所有的字母、数字、标点符号等。 -
虽然
char最常被用来处理字符,但也可以将它用做比short更小的整型。 -
cin和cout的行为都是由变量类型引导的。 -
如何在C++中书写字符字面值:将字符用单引号括起。
-
C++对字符用单引号,对字符串使用双引号。
-
cout.put()函数,该函数显示一个字符。
-
-
值的类型将引导
cout选择如何显示值——这是智能对象的另一个例子。- 即使通过键盘输入的数字也被视为字符。
-
成员函数
cout.put()- 函数
cout.put()是一个重要的C++ OOP概念——成员函数——的第一个例子。 - 类
ostream有一个put()成员函数,用来输出字符。只能通过类的特性对象来使用成员函数。要通过对象使用成员函数,必须用句点将对象名和函数名称连接起来。句点被称为成员运算符。
- 函数
-
有些字符不能直接通过键盘输入到程序中。
- 对于有些字符,C++提供了一种特殊的表示方法——转义序列。
- 注意,应该像处理常规字符那样处理转义字符。即将它们作为字符常量时,应用单括号括起;将它们放在字符串中时,不要使用单引号。
- 可以基于字符的八进制和十六进制编码来使用转义序列。
- 对于有些字符,C++提供了一种特殊的表示方法——转义序列。
-
通用字符名
- 通用字符名可以以
\u或\U打头。\u后面是8个十六进制位,\u后面是16个十六进制位。
- 通用字符名可以以
-
与
int不同的是,char在默认情况下既不是没有符号,也不是有符号。是否有符号由C++实现决定。- 如果需要
char有特定的行为,可以显式地将类型设置为signed char或unsigned char。
- 如果需要
-
wcha_t