C++语言的由来
C++语言起源于C语言。在1973~1979年间,C语言迅速成为应用最广泛的系统程序设计语言。然而,由于C语言也存在一些缺陷,例如类型检查机制相对较弱、缺少支持代码重用的语言结构等,造成用C语言开发大程序比较困难。为了克服C语言存在的缺点,在1980年,由美国贝尔实验室在C语言的基础上,开始对C语言进行改进和扩充,并将“类”的概念引入了C语言,构成了最早的C++语言(1983年)。
后来C++中又引进了运算符重载、引用、虚函数等许多特性,并使之更加精炼。由贝尔实验室开发出的这种过程性与对象性相结合的程序设计语言,直到1983年正式取名为C++。以后又经过不断的完善和发展,由美国国家标准化协会ANSI和国际标准化组织ISO一起进行了标准化工作,并于1998年正式发布了C++语言的国际标准(ISO/IEC:98-14882)成为目前的C++语言。
简单地说,C++语言是在C语言的基础上引入了面向对象的机制而形成的一门计算机编程语言。C++继承了C语言的大部分特点:一方面,C++语言将C语言作为其子集,使其能与C语言相兼容;另一方面,C++语言支持面向对象的程序设计,如类的概念和性质。这就是对C语言的重要改进1。
C++语言的特点C++语言的特点大致有如下3点:
1.C++语言是一种面向对象的程序设计语言。其模仿了人们建立现实世界模型的方
法。C++语言的基础是对象和类。现实世界中客观存在的事物都被称为对象。例如,一辆汽车、一家百货商场等。C++中的一个对象就是描述客观事物的一个实体,其是构成信息系统的基本单位。类(class)是对一组性质相同对象的描述,是用户定义的一种新的数据类型,也是C++语言程序设计的核心。
2. C++是C语言的超集。其不仅包含了C语言的大部分特性,例如指针、数组、函数、语法等。其还包含面向对象的特点,例如封装、继承、多态等。
3.C++是程序员和软件开发者在实践中创造的。
C++支持的编程类型面向对象编程封装:将数据和操作数据的函数绑定在一起;避免受到外界的干扰和误用,确保了安全;
数据隐藏:由封装引申出来的另一个重要的 OOP 概念;
继承:继承是 OOP 中一个重要的概念,代表了一种 isa 的关系;提高了代码重用率和执行效率;
多态:基于继承和虚函数实现,是一种动态绑定技术;调用成员函数期间,根据调用函数的对象的类型动态的决定最终调用的函数(虚函数)实现。
过程化编程派生自结构化编程,使用程序调用或函数调用的方式来进行流程控制
流程则由包涵一系列运算步骤的程序(Procedures)、例程(routines)、子程序(subroutines)、 方法(methods)、或函数(functions)来控制;
在程序运行的任何一个时间点,都可以调用某个特定的程序;任何一个特定的程序,也能被任意一个程序或是它自己本身调用
泛型编程在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义);
在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板);
允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时(instantiate)作为参数指明这些类型;
泛型定义的种类。
C++的使用场景编写设备驱动程序和其他要求实时性的直接操作硬件的软件;
编写苹果电脑或 Windows PC 机系统的主要用户接口2。
C++中的各种字符标识符与关键字在C++中,有一套用来表示程序中的变量、常量、数据类型及语法关键字的符号,这些符号被统称为标识符。
标识符的命名有如下几点规则需要遵循:
标识符的第一个字符必须是字母或者下划线。
标识符中不应有除字母、数字和下划线以外的字符。
标识符的长度一般不超过31个字符。
C++中的标识符可以大写,也可以小写。不过大写和小写是有区别的,即对应的大小写字母会被当作不同的标识符。例如Good和good是被当作不同的标识符,Hello和HELLO也是不同的标识符。
在C++的标识符中,有些单词组合是不能由用户声明的,其是由C++编程语言本身保留使用,具有特殊的含义。一般用于表示固定语句、预定义类型说明、预定义函数等。这种标识符被统称为关键字或者保留字。
有了这些关键字,C++编译器才能正确识别输入的程序代码是如何分隔的,这就好像写应用文时为了突出重点,常常把关键字或者词进行标注一样1。
分隔符与注释符C++中除了标识符外,还有两种起特殊作用的符号。一种是用来分隔代码语句的,被称为分隔符;另一种是起说明作用的,被称为注释符。
一、划分语句的分隔符
其中分隔符又被称为C++中的标点符号。用来将单词或者程序分隔,其表示某个程序的结束和另一个程序的开始。C++中包括如下几种分隔符。
1.空格符:用来作为单词与单词之间的分隔符。
2.逗号:用来作为说明多个变量的分隔符,或者多个参数之间的分隔符。
3.分号:用来作为C++中语句的结束分隔符。
4.花括号:用来构造程序实体的分隔。
二、使语句无效的注释符
注释在程序代码中起到对程序语句注解和说明的作用。其目的是为了代码设计者或审查者方便阅读程序代码。对计算机而言其是无效的,在程序编译时,注释会被自动从程序代码中忽略掉。换句话说,这就好比大家在读书时所做的读书笔记,可以标记在书上,也可以标记在笔记本上,但对书的内容(代码)并没有任何影响,只是起一个辅助说明的作用。
在C++中采用如下两种注释方法。
1.使用/*和*/括起来进行注释,在/*和*/之间的字符都被作为注释符处理,适用于多行注释信息。
2.使用“//”,从“//”开始直到所在行的行尾,所有字符都被当作注释处理。适用于单行注释信息3。
C++中的常用数据类整数型数据所谓的整数型数据类是指数据是没有小数部分的,其值可以是正,也可以是负,简称为整数型。例如日常生活中用到的12、–22、1234、2009、–999、–2009、0等都是整数型的。其中12、1234、2009等又被称为正整数,0一般也被当作正整数处理。而–22、–999,–2009等被称为负整数。在C++中用int这个关键字来声明一个存放整数型数据的变量。例如:
int nCount; //声明一个整数型变量nCount int nNum; //声明一个整数型变量nNum int abc;. //声明一个整数型变量abc声明整数型时要进行初始化,其方法如下:
int nCount=100; 一个整数型在计算机中可以表示的数值的大小范围是多少呢?如下表所示。
|| ||
虽然整数型能表示的数已经比较大,但也有不够用的情况。例如,在有的游戏中表示银河系两个星球之间的距离是多少千米,或者太阳系的直径是多少米等数据时,整数型变量就不够了。为此C++中就引入了长整数类型。用long这个关键字来声明一个长整数型变量。例如:
long lLen; //声明长整数型变量 iLenlong lCount; //声明长整数型变量iCount long lTime; //声明长整数型变量 iTime 长整数型变量,其存储数值的范围如下表所示。
|| ||
计算机中长整数可能会降低程序执行的速度,所以有时候为了节约空间和提高程序执行速度,C++中又引入了短整数。在C++中用short这个关键字来声明一个短整数型变量,其数值的范围在16位和32位计算机上都是一样的,为32 767~–32 768。例如:
short sCount; //声明短整数型变量 sCount short sNum; //声明短整数型变量 sNum short sLen; //声明短整数型变量 sLen计算机为了在不增加存储空间和不影响执行速度的前提下,在存储数据时,直接把存储数据的符号去掉,这样变量能表示的最大值就扩大了,这种存储的数据在C++中就被称为无符号数据类型。
C++中声明无符号整数型变量,是在int关键字前加上unsigned关键字。例如:
unsigned int unCount; //声明无符号整数型变量 unCount unsigned int unNum; //声明无符号整数型变量 unNum unsigned int abc; //声明无符号整数型变量 abc 无符号整数型变量存放的数值范围如表所示。
|| ||
然有无符号的整数型变量,那么也就有无符号的长整数和短整数型变量,其声明都是在原关键字前加上unsigned关键字。例如:
unsigned long ulCount; //声明无符号的长整数型变量 uiCount unsigned long ulNum; //声明无符号的长整数型变量 uiNum unsigned short usLen; //声明无符号的短整数型变量 usLen unsigned short usCount; //声明无符号的短整数型变量 usCount 无符号短整数其数值范围在16位和32位计算机上都是65 535~0。而无符号的长整数其数值范围如表所示。
|| ||
实数型数据实数型数据是由一个整数部分、一个小数部分以及可选的后缀组成的。例如,3.1415、0.5、0.875等都是实数型数据。在C++中把实数型数据按照其表示的数值范围进行分类,可分为单精度、双精度和长双精度3种数据类型。
1.声明一个单精度的实数变量使用float关键字,所以单精度的实数型又被称为浮点型。例如:
float half; //声明单精度的实数变量 half float pi; //声明单精度的实数变量 pi float num; //声明单精度的实数变量 num单精度实数类型一般是以32位进行存储表示的,其数值表示范围为3.4e+38~3.4e–38,最多只提供7位有效数字。
2.双精度数据类型和单精度数据类似,因为其要占据的存储空间是单精度数据类型的两倍,所以被称为双精度数据类型。声明一个双精度类型的实数变量,使用double关键字。例如:
double dbNum1; //声明双精度的实数变量dbNum1 double dbNum2; //声明双精度的实数变量dbNum2 double dbNum3; //声明双精度的实数变量dbNum3 精度实数类型是以64位进行存储表示的,其数值范围为1.7E–308~1.7E+308,最多可提供16位的有效数字。
3.长双精度数据类型,理论上是双精度占用存储空间的两倍,但在实际中还是只占用64位的存储空间。声明一个长双精度实数变量,使用long double关键字。例如:
long double dbNum1; //声明长双精度的实数变量dbNum1 long double dbNum2; //声明长双精度的实数变量dbNum2 long double dbNum3; //声明长双精度的实数变量dbNum3 长双精度因为其占用的存储空间和双精度相同,所以其实数类型的数值表示范围还是为1.7E–308~1.7E+308,最多可提供16位有效数字。
实数在C++中也可以包含一个指数形式的数值,其类似于数字的科学计数表示法。
所有的实数型变量在声明时,对其进行初始化方法如下:
float half = 11111.511; double dwSize = 11111.105;由于float型的变量只能存储4个字节,有效数字为7位。所以其中half中的最后一位小数是不起作用的,即其值为11111.51。但如果是double型的,则dwSize中是能够存储全部11111.105这个数的。
字符型数据通常字符型数据变量是用来存储计算机中的字符的。例如:‘A’,‘#’,‘z’,‘1’等都是字符型的数据。在计算机中,字符型变量并不是直接存储字符,而是存储字符的ASCII(American Standard Code for Information Interchange,美国标准信息交换码)码值。
ASCII码是目前计算机中用得最广泛的字符集及编码,是由美国国家标准局(即ANSI)制定的,其已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。
根据ASCII码标准,数值65代表大写的‘A’,而97则代表小写字母‘a’,表中列出了ASCII码表中前128个编码的十进制表示,读者可以不必记住这些代码值,但必须理解每个ASCII码都与一个特定的数值相对应的这个概念,ASCII码表如表所示。
|| ||