C++_基本数据类型

面向对象(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++把值从一种类型转换为另一种类型。很多类型转换都是“安全的”。即可以在不损失和改变数据的情况下完成转换。对于其他一些转换,如将浮点类型转换为整型,则需要更加小心。

猜你喜欢

转载自www.cnblogs.com/grooovvve/p/10467783.html
今日推荐