第1章 C++语言概述 1 本章学习要求: 程序设计方法和程序设计语言的发展 C++语言的历史 C++语言的字符集、标识符、关键字 C++程序的组成 C++程序的开发过程 2 1.1 程序设计概述 1.1.1 程序设计方法 综观短暂的计算机发展历史,这两个方面(算法和数据)一直保 持不变,发展演化的是它们之间的关系,就是所谓的程序设计方法( Programming Paradigm)。目前常用的程序设计方法主要包括:结构化程 序设计、面向对象程序设计以及泛型程序设计。 1. 结构化程序设计(Structural Programming) 结构化程序设计是一种以功能为中心,基于功能分解的程 序设计方法。一般采用自顶向下,逐步求精的方法,将一个复杂的系统功能 逐步分解成由许多简单的子功能构成,然后分别对子功能进行编程实现。一 个程序由一些子程序构成,每个子程序对应一个子功能,它实现了功能抽象 。子程序描述了一系列的操作,它是操作的封装体。结构化程序的执行过程 体现为一系列子程序的调用。在程序中,数据处于附属地位,它独立于子程 序,在子程序调用时,作为参数传递给子程序使用。公式1-1描述了结构化程 序的本质特征。 程序 = 算法 + 数据结构 (1-1) 5 2. 面向对象程序设计(Object-Oriented Programming) 在20世纪70年代,由于软件危机的出现,结构化程序设计越 来越不能满足大型程序设计的要求,程序设计的焦点从结构化程序设计方法转 移到抽象数据类型的程序设计上,现在通常称为面向对象的程序设计。一个面 向对象的程序由一些对象构成,对象是由一些数据及可施于这些数据上的操作 所构成的封装体,对象的特征由相应的类描述,一个类可以从其他的类继承。 面向对象程序的执行过程体现为各个对象之间互相发送和处理消息。面向对象 程序可以用以下公式描述。 程序 = 对象/类 + 对象/类 + … 对象/类 = 数据 + 操作 6 3. 泛型程序设计(Generic Programming) 简单地说,泛型程式设计是一种将类型参数化的思维模式。面向对象 关注的是程序的数据方面,而泛型程序设计关注算法方面,两者的侧重点不同 。面向对象是一个用来管理和实现大型项目的工具。泛型程序设计一般提供实 现通用任务的工具。如数据排序,其中的”泛”表示根据类型来产生代码。 C++中描述数据有很多类型,如整型、浮点类型、字符、以及自定义类型,如 果希望在系统中对不同类型的数据同时实现一个功能:排序。通常的做法是为 每种类型的数据编写单独的排序代码。泛型程序设计则可以让你为一个广泛的 类型写一次排序功能,对每个你希望的实际数据类型使用该功能代码 7 1.1.2 程序设计语言 8 1.机器语言 机器语言即是机器指令的集合。不同型号CPU的计算机都有自己的指 令集合,如Intel CPU和AMD CPU能够识别的机器语言是不同的。即使采用的 同样是Intel CPU,如:286、386、486、586或是Core2,它们的机器语言也有 些区别。因此直接利用某种CPU的机器语言所编写的的程序难以从一种型号 CPU的计算机移植到另一种型号CPU的计算机上运行。 9 2. 汇编语言 为了减轻使用机器语言编程的痛苦,人们进行了一种有益的 改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比 如,用“ADD”代表加法,“MOV”代表数据传递等等。这样一来,人们很容易 读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称 为汇编语言。 因此,汇编语言也被称为面向机器的语言。早期的计算机由 于速度慢、内存小,衡量程序质量高低最重要的指标是机器执行的效率,汇编 语言得到广泛的使用。目前程序执行效率仍十分重要,针对计算机特定硬件而 编制的汇编语言程序精炼而质量高,能准确发挥计算机硬件的功能和特长,所 以至今在一些底层系统软件(如操作系统、硬件控制以及三维图形引擎等)的 开发中,仍是一种常用而强有力的软件开发工具。 10 3. 高级语言 为了进一步提高编程效率,改进程序的可读性、可维护 性,又出现了许多高级语言,这些编程语言接近于数学语言或人的自然语 言,同时又不依赖于具体的计算机硬件,编出的程序能在所有机器上通用 ,如Fortran、Basic、Pascal、Java、C和C++等。 11 从以上介绍的程序设计语言的发展过程,我们可以看出:程序设计语言 发展的总体趋势是其描述问题的方式越来越接近于人的自然思维方式,这样可以 简化程序员的编程强度。而源程序的代码到机器语言指令的转换则留给某些大公 司完成的编译软件去完成。高级语言虽然比低级语言更容易描述问题,但采用这 些语言还必须按照计算机解决问题的方式来描述问题,对于大型的软件系统开发 ,程序设计仍然非常困难。因此,人们还在努力设计出更高级的语言更加接近自 然语言的编程语言,使得能够以更加自然的方式来进行程序设计。 12 1.2 C++语言的发展历史 C++是当今非常流行的一种支持结构化程序设计、面向对象程序设计 以及泛型程序设计的高级程序设计语言。它适合于作为系统描述语言,即可用 来写系统软件,也可用来写应用软件。它是20世纪80年代初由贝尔实验室在C 语言的基础上,借鉴其他面向对象程序设计语言的特性而开发的。 13 C 语言最早的原型是 Algol60,1963年,剑桥大学将Algol60发展成为 CPL(Combined Programing Language); 1967年,剑桥大学的Matin Richards对CPL语言进行了简化,产生了 BCPL语言; 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并取名 叫做B语言,意思是提取CPL的精华(Boiling CPL down to its basic good features) ,并用 B 语言写了第一个 UNIX 系统; 1973年,AT&T贝尔实验室的Dennis Ritchie(D.M.RITCHIE)在BCPL和B语 言的基础上设计出了一种新的语言,取BCPL中的第二个字母为名,这就是大名鼎 鼎的C语言。 1979年,C++之父Bjarne Stroustrup借鉴面向对象程序设计语言Simula中 “类”的概念,开始研究增强的C语言,使其支持面向对象的特性,由此产生了带 类的C。后来C标准委员会决定为这个版本的C起个新的名字,那个时候征集了很多 种名字,最后采纳以C语言中的++运算符来体现它是C语言的进步,所以就叫C++ 。 1998 年,ANSI 和 ISO 先后批准C++语言成为美国国家标准和国际标准, 同年正式发布了C++语言的国际标准ISO/IEC:98-14882,各软件商推出的C++编 14 译器都支持该标准,并有不同程度的拓展。 1.3 简单C++语言程序的构成 例 利用C++输出一个字符串。 /*输出字符串*/ #include <iostream> using namespace std; int main (){ cout << "welcome to C++ world!\n"; return 0; } 输出结果 15 例 从键盘输入两个整数,并输出这两个整数的和。 #include <iostream> using namespace std; int main(){ int x; int y; //定义两个整型变量 cout << "请输入两个整数,用空格分隔,按回车键(Enter):"; cin >> x >> y; //从键盘输入两个整数 cout << "add=" << x+y; //输出字符串和两个整数的和 return 0; } 输出结果 16 例 从键盘输入两个整数,利用独立的函数求这两个数的和,并输出。 #include <iostream> using namespace std; int add(int a, int b){ return (a+b); } int main(){ int x; int y; int sum; //定义三个整型变量x,y,sum cout << "请输入两个整数,用空格分隔,按回车键(Enter):"; cin >> x >> y; //从键盘获取两个整数 sum = add(x, y); //利用函数add求x,y的和 cout << "add="<< sum; return 0; } 17 C++程序的基本构成: (1) 逻辑上,一个C++程序由一些函数、类、全局变量/对象构成,一个可执 行C++程序必须有且仅有一个main函数,main函数是C++程序的入口,即 第一个执行的函数。 (2) C++函数由函数头和函数体构成,函数头用来说明如何使用函数,函数体 用来包含实现函数功能的代码。 (3) 物理上,一个C++程序可以放在一个或多个C++源文件(后缀名为.cpp 的文件)中,每个源文件都可以包含许多函数、类、全局变量/对象的定义等。 (4) 在一个源文件中,如果要使用其他的功能,应当使用#include将该功能包 含进来。 18 1.4 C++字符集,标识符,关键字 19 1.4.1 字符集 C++语言的字符集由26个大小写英文字母、10个数字字符和以及一些 特殊符号构成: 英文字母:A~Z、a~z 数字字符:0~9 特殊字符:空格 !# % ^ & * _ + = - ~ < > / \ } . , : ? ' ″( ) [ ] { } 20 1.4.2 标识符 C++中标识符的构成具有以下规则: (1) 标识符只能由字母、数字和下划线三类字符构成。 (2) 第一个字符必须是英文字母或下划线“_”,不可以以数字字符打头。如 ,Abc、X1、x1、_x1、x2、x3、desk、books等都是合法的标识符,而 5you不是合法的标识符,但you5、You5、_you5都是合法的标识符。 (3) 字母的大小写是有区别的。如,x1、X1是不同的标识符。 (4) 标识符不可以和表1-1中的关键字同名,因为关键字具有特殊的用途,否 则会对编译器产生混淆。 21 1.4.3 关键字 关键字是一种有特殊用途的标识符,它是C++语言预先定义的词法符 号,不能在程序中用作其他用途. C++中的关键字如下表所示. asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union using unsigned virtual void while volatile wchar_t 22 1.5 C++语言程序开发步骤和调试方法 其他 库文件 源文件*.cpp 目标文件 *.obj 头文件*.h 编辑 编译 可执行文件 *.exe 连接 运行 输出结果 出错 23 (1) 编辑。所谓程序,就是一组计算机系统能够识别和执行的指令。每一 条指令都指挥计算执行特定的操作。用高级语言编写的程序称为源程序(source programm)。C++的源程序是以.cpp(cpp是c plus plus的缩写)为后缀的文本文 件。在编程时,我们利用某个编辑程序(如Windows中的记事本、写字板等), 把C++源程序代码输入到计算机中,并以.cpp为后缀保存到外存中(如硬盘等) 。还有一种后缀为.h的源文件(称为头文件 header file),用来说明其他函数库 提供的功能。有些头文件是不带后缀的,如iostream文件。 (2) 编译。计算机的CPU只能识别由0和1组成的二进制的机器语言指令, 而不能识别使用高级语言编写的指令,如“result = a*b +c -d”。因此,必须利用 C++编译器(compiler,也称为编译程序或编译系统)将编辑好的源程序转换成二 进制机器代码形式的目标文件,这个过程就是编译,目标文件的文件名通常为 *.obj(object的缩写)。 (3) 连接。一个C++程序中的代码可以分别放到多个源文件中,而每个源 文件都是分别编译生成目标文件的,因此为了得到一个完整的可执行程序,必须 通过一个连接程序(linker,也称为连接器)把这些目标文件以及程序中用到的一 些系统功能或其他第三方所提供的功能所在的目标文件(通常称为库文件)连接 起来,最终形成一个可执行的二进制文件,可执行文件的后缀通常为*.exe。 (4) 运行。是让操作系统将某个可执行文件装入内存,运行其中的可执行 代码,从而得到输出的结果。 24
© Copyright 2024 ExpyDoc