面向对象编程(OOP)的本质是设计并拓展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。内置的C++类型分为两组:基本类型和复合类型。这里我们将介绍基本类型的整数和浮点数
3.1、简单变量
3.1.1、变量名
C++必须遵循几种简单的C++命名规则:
(1).在名称中只能使用字母字符、数字和下划线(_)。
(2)名称的第一个字符不能是数字。
(3)区分大小写字符。
(4)不能将C++关键字用作名称。
(5)以两个下划线大头或以下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
(6)C++对于名称的长度没有限制,名称中所有字符都有意义,但有些平台有长度限制。
如果想用两个或多个单词组成一个名称,通常的做法是用下划线字符将单词分开,如my_yuanshi;或者第二个单词开始将每个单词的第一个字母大写,如myAccountNumber。
3.1.2、整型
整数就是没有小数部分的数字。整数有很多,目前不可能用有限的计算机内存来表示所有整数。因此语言只能表示所有整数的一个子集。而C++则提供好几种,便能根据实际要求选择最合适的整数。
不同C++整型使用不同的内存量来存储整数。使用的内存量越大,可以表示的整数值范围也越大。有的类型(符号类型)可表示正值和负值,而有的类型(无符号类型)不能表示负值。C++的基本整型分别是char、short、int、long、和long long。(按照存储整数时使用的内存量进行递增排序)。
3.1.3、整型short、int、long和long long
下面介绍一下位与字节(重要!)
计算机内存的基本单元是位(bit)。可以将bit看作电子开关,可以开,可以关。关表示值为0,开表示值为1。因为每一位都可以有两种设置,所以8位的总组合为2^8,即256。
字节(byte)通常指的是8位的内存单元,它指的是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。
C++提供了一种灵活的标准,它确保了最小长度,如下所示:
(1)short至少16位。
(2)int 至少与short一样长。
(3)long至少32位,且至少与int一样长。
(4)long long至少64位,且至少与long一样长。
这4种类型都是符号类型,负值和正值几乎相同。例如16位的int取值范围为-32768~+32767。要想知道系统中整数的最大长度,可以在程序钟使用C++工具来检查类型的长度。sizeof运算符返回类型或变量的长度,单位为字节(运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值)。
头文件climits中包含了整型限制的信息。如下代码进行演示:
#include <iostream>
#include <climits>
int main()
{
using namespace std;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
cout << "int is " << sizeof(int) <<" bytes." << endl;
cout << "short is " << sizeof n_short << " bytes." << endl;
cout << "long is " << sizeof n_long << " bytes." << endl;
cout << "long long is " << sizeof n_llong << " bytes." << endl;
cout << endl;
cout << "Maximum values:" << endl;
cout << "int:" << n_int << endl;
cout << "short:" << n_short << endl;
cout << "long:" << n_long<< endl;
cout << "long long:" << n_llong << endl<<endl;
cout << "Minimum int value =" << INT_MIN << endl;
cout << "Bits per type=" << CHAR_BIT << endl;
return 0;
}
3.1.3.1、运算符sizeof和头文件limits
sizeof运算符指出,int的长度为4个字节。可对类型名或变量名使用sizeof运算符。
头文件climits定义了符号常量来表示类型的限制。可以到这里看详细的定义:climts中的符号常量
climits文件中包含与下面相似的语句行:
#define INT_MAX 32767
#define和#include一样,也是一个预处理器编译指令。该编译指令告诉预处理器:在程序中寻找INT_MAX,并将所有INT_MAX都替换为32767。预处理器寻找独立的标记,并不会将单词里含有INT_MAX给替换。所以#define可以用来定义自己的符号常量。C++有一种更好的创建符号常量的方法(使用关键字const,在后面进行讨论)。
3.1.3.2、初始化
初始化将赋值与声明合并在一起。例如下面,将int的最大取值赋值给n_int。
int n_int=INT_MAX;
也可以使用字面值常量来初始化,或者用已定义过的变量来初始化,甚至可以使用表达式来初始化。
注:如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。
3.1.3.3、C++11初始化方式
用大括号初始化器用于单值变量。用这个方法可以省略等号,并且大括号内不用包含东西(默认初始化为0)。
int yuanshi={1600};
int yuanshi{7};
int mola{};
3.1.4、无符号类型
如果short表示的范围为-32768~+32767,则无符号版本的表示范围为0~65536。当且仅当数值不为负才应使用。要创建无符号版本的基本类型,只需要使用关键字unsigned来修饰声明即可。
#include <iostream>
#define ZERO 0
#include <climits>
int main()
{
using namespace std;
short sam = SHRT_MAX;
unsigned short sue = sam;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl
<< "Add $1 to each account." << endl << "Now";
sam += 1;
sue += 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited.\nPoor Sam!" << endl;
sam = ZERO;
sue = ZERO;
cout << "Sam has " << sam << " doolars and Sue has " << sue;
cout << " doolars deposited." << endl;
cout << "Take $1 from each account." << endl << "Now ";
sam += 1;
sue -= 1;
cout << "Sam has " << sam << " dollars and Sue has " << sue;
cout << " dollars deposited." << endl << "Lucky Sue!" << endl;
return 0;
}
这些整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。
3.1.5、选择整型类型
(1)一般没有特殊要求选择int。
(2)如果变量的值不为负,选择unsigned。
(3)如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long;如果超过20亿,则采用long long。
(4)需要节省空间,且通常仅当有大型整型数组时用short。
3.1.6、整型字面值
整型字面值(常量)是显示地书写的常量。C++使用前一(两)位来标识数字常量的基数。
(1)第一位为1~9,则为十进制。
(2)第一位是0,且第二位1~7,则为八进制。
(3)如果前两位是0x或0X,则为十六进制。
注:默认情况下,cout以十进制格式表示整数。可以用下面代码转化cout显示方式。
cout<<dec;//十进制
cout<<hex;//十六进制
cout<<oct;//八进制
3.1.7、char类型:字符和小整数
char类型是专为存储字符而设计的。常用ASCLL码表。
#include <iostream>
int main()
{
using namespace std;
char ch = 'M';
int i = ch;
cout << "The ASCLL code for " << ch << " is " << i <<endl;
cout << "Add one to the character code:" << endl;
ch += 1;
i = ch;
cout << "The ASCLL code for " << ch << " is " << i << endl;
cout << "Display char ch using cout.put(ch):";
cout.put(ch);
cout << endl << "Done!" << endl;
return 0;
}
3.1.7.1、程序说明
ch为字符“M”,而i为“M”的ASCLL码值“77”。ch加一改变其ASCLL值,表示为“N”。
3.1.7.2、成员函数cout.put()
函数cout.put()是一个重要的C++OOP概念——成员函数——的第一个例子。成员函数归类所有,描述了操纵类的特定对象(例如这里的cout对象)来使用成员函数。必须用句点将对象名和函数名称(put())连接起来。句点称为成员运算符。它提供了另一种显示字符的方法,可以替代<<运算符。
3.1.7.3、signed char 和unsigned char
char在默认的情况下既不是没有符号,也不是有符号。是否有符号由C++决定。unsigned char类型的表示范围通常为0~255,而signed char的表示范围为-128~+127。
3.1.7.4、wchar_t
需要处理的字符集可能无法用一个8位字节表示,可以将char定义为一个16位的字节或更大的字节。iostream文件的wcin和wcout可用于处理wchar_t流。
3.1.8、bool类型
布尔变量可以是ture或false。C++将非零值解释为true,将零值解释为false。