面向对象(OOP)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。
如果正确做到这一点,就会发现以后使用数据会容易很多。然而创建自己的类型之前,必须了解并理解C++内置类型。这些类型是创建自己类型的基本组件。
内置C++类型分两组:基本类型和复合类型。
基本类型:整数和浮点数
复合类型:数组、字符串、指针和结构
程序还需要一种标识存储的数据的方法——使用变量。
如何在C++中进行算术运算。
C++如何从一种类型转换到另一种类型。
========================================
简单变量
程序存储数据必须记录3个基本属性:
信息将存储在哪里
要存储什么值
存储何种类型的信息
变量名
命名规则
两个下划线或下划线和字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
命名风格
变量名前加上描述变量类型或内容的前缀。
整型
整数是没有小数部分的数字。
宽度(width)用于描述存储整数时使用的内存量。
整数类型按宽度递增:char、short、int、long和C++11新增的long long。其中每种类型都有有符号版本和无符号版本,因此总共有10种类型可供选择。
char类型有一些特殊属性,它最常用于表示字符,而不是数字。
整型short、int、long和long long
计算机内存由一些叫做(位)的单元组成。short、int、long和long long类型通过使用不同数目的位来存储值。在不同计算机这些类型的宽度不是固定的。C++提供了一种灵活的标准。
short至少16位
int至少与short一样长
long至少32位,且至少与int一样长
long long 至少64位,且至少与long一样长
计算机的基本内存单元为:位
字节通常指8位的内存单元。从这个意义上讲,字节指的是描述计算机内存量的度量单位。C++对字节的定义不同,C++字节至少能够容纳实现的基本字符集的相邻位组成。也就是其可能取值的数目必须等于或超过字符数目。例如ASCII字符集,它们都可以用8位来容纳。国际编程使用更大的字符集,如Unicode,因此有些实现可能使用16位或32位字节。有些人使用术语八位组来表示8位字节。
要知道系统中整数的长度,可以在程序中使用C++工具来检查类型的长度。
sizeof运算符返回类型或变量的长度。单位为字节。
运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值。
运算符sizeof和头文件climits
头文件climits定义了符号常量来表示类型的限制。
初始化
初始化将赋值和声明合并在一起。
如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。
在声明时对变量进行初始化是个好习惯,可以避免以后忘记对它赋值的情况发生。
C++的初始化方式
还有另一种初始化方式,用于数组和结构。但在C++98中,也可用于单值变量。
大括号初始化器,不仅可以用于数组和结构,也可以用于单值,例如:
int enus{7} ; //不使用等号
int reheas = {12};
int rocs = { } //大括号内不包含任何东西,在这种情况下,变量将被初始化为零
无符号类型
前面介绍的4种整型都有一种不能存储负数值的无符号变体。其优点是可以增大变量能够存储的最大值。
要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可。
unsigned short change;
unsigned int revoer;
unsigned 本身是unsigned int的缩写
选择整型类型
int被设置为目标计算机而言最为“自然”的长度。
自然长度指的是计算机处理起来效率最高的长度。如果没有非常有说服力的理由来选择其他类型,则应使用int。
如果表示的值不可能为负,则可以使用无符号类型,这样变量可以表示更大的值。
整型字面值
整型字面值(常量)是显式地书写的常量。
C++能够以三种不同的计数方式来书写整数:基数为10,基数为8(老式UNIX版本),基数为16(硬件黑客的最爱)。
C++如何确定常量的类型
后缀:数字常量后面的字母,用于表示类型
例如整数后面的l和L后缀表示该整数位long常量。
U或u后缀表示unsigned int常量。
char类型:字符和小整数
char类型是专为存储字符而设计的。
存储字母:编程语言通过使用字母的数值编码解决了这个问题。
char类型是另一种整型,它能够表示目标计算机系统中的所有基本符号——字母、数字、标点符号。
最常用的符号集是ASCII字符集。字符集中的字符用数值编码(ASCII码)。
程序说明
char ch = ‘M’;
int I = ch;
cout.put(‘!’)
成员函数:
成员函数归类所有,描述了操纵类数据的方法。
只能通过类的特定对象来使用成员函数。
必须使用句点将对象名和函数名称连接起来。
句点被称为成员运算符
cout.put()的意思是:通过类对象cout来使用成员函数put()
使用cout.put()函数有历史原因。早期的C++,cout将字符变量显示为字符,而将字符常量显示为数字。所以cout.put()能够正常显示字符常量。
后来cout可以正常处理字符常量了。
char字面值
‘A’ 即字符A的ASCII码
这种表示法由于数值编码,用户不需要知道编码方式。如果系统使用的是EBCDIC,则A的编码将不是65,但是‘A’表示的仍然是字符A。
C++提供了一种特殊表示方法——转义序列,来表示难以用键盘表示的特殊字符。
还可以基于字符的的八进制和十六进制编码来使用转义序列。
通用字符名
signed char和unsigned char
char作为数值类型,则unsigned char和signed char之间的差异将非常重要。unsigned char类型表示范围通常为0~255。signed char表示范围-128~127。
char来存储标准ASCII字符,则char有没有符号都没有关系。
wchar_t
8位char可以表示基本字符集。
wchar_t可以表示扩展字符集(宽字符类型);wchar_t是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。
cin和cout将输入和输出看成是char流。因此不适合用来处理wchar_t类型。Iostream头文件的最新版本提供了作用相似的工具——wcin和wcout,可用于处理wchar_t流。
另外可以使用前缀L来指示宽字符常量和宽字符串。
wchar_t =L‘P’;
wcout << L”tall”<<endl;
此外还有char16_t和char32_t类型,这两种类型都是无符号整数类型。它们都有底层类型内置的int整型。
bool类型
C++标准添加了一种名叫bool的新类型。布尔变量的值可以是True或False。
C++将非零值解释为true,将零解释为false。
现在可以用布尔类型来表示真假了,所以可以用字面值true来表示真,字面值false来表示假。
========================================
const限定符
C++有一种更好的处理符号常量的方法,使用const来修改变量声明和初始化。
const int Months =12; //初始化之后就再也不能被修改了
Months初始化后,编译器将不允许再修改该常量的值了。Const相当告诉编译器,被它修饰的变量不能再被更改了。
========================================
浮点数
程序员只需要了解:浮点数能够表示小数、非常大和非常小的值。
它的内部表示方法和整数有天壤之别。
浮点类型
float、double、long double;
有3个
浮点常量
默认程序把浮点常量存储为double类型;
如果希望改成float类型,使用f或F后缀;
如果希望改成long double类型,使用l或L后缀;
浮点数的优缺点
浮点数有两大优点,首先它可以表示整数之间的值。其次,由于有缩放因子,它可以表示的范围大得多。另一方面,浮点运算符的速度通常比整数运算慢,而且精度也将降低。
整数和浮点类型都被称为算术类型。
========================================
C++算术运算符
C++使用运算符来运算;提供了几种运算符来完成5种基本的算术运算;
加法、减法、乘法、除法以及求模;
每种运算符:都使用两个值(操作数)来计算结果。
运算符和操作数构成了表达式。
+ 加法
- 减法
* 乘法
/ 除法 得到模,19/6为3
% 取余 19%6为1
运算符的优先级和结合性
除法分支
除法的行为取决于操作数的类型。如果两个操作数都是整数,则C++将执行整数除法。这意味着结果的小数部分将被丢弃,使得最后一个结果为整数。如果其中有一个(或两个)操作数是浮点值,则小数部分将保留,结果为浮点数。
求模运算符
类型转换
要了解在哪些情况下会发生类型转换,类型转换的结果是什么。
将一种算术类型赋值给另一种算术类型的变量时,C++将对值进行转换;
表达式中包含不同的类型时,C++将对值进行转换;
将参数传递给函数时,C++将对值进行转换;
1、 初始化和赋值进行的转换
C++允许将一种类型的值赋值给另一种类型的变量。这样做,值将被转换为接受变量的类型。
2、 以{ }方式初始化时进行的转换(C++11)
3、 表达式中的转换
4、 传递参数时的转换
5、 强制类型转换
强制类型转换机制显式地进行类型转换
通用格式:
(typename) value //C语言风格
typename (value) //C++语言风格
========================================
总结
1、C++的基本类型分为两组,一组由存储为整数的值组成,另一组由存储为浮点格式的值组成。
2、wchar_t类型,用于扩展字符集
3、浮点类型可以表示小数值,以及比整型能够表示的值大得多的值。
4、C++使用运算符来提供对数字类型的算术运算
5、对变量赋值,使用不同类型运算时,使用强制类型转换时,C++把值从一种类型转换为另一种类型。很多类型转换都是“安全的”。即可以在不损失和改变数据的情况下完成转换。对于其他一些转换,如将浮点类型转换为整型,则需要更加小心。