授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第1章 学习面向对象程序设计方法的理由 面向对象程序设计的有关概念 C++语言是一种面向对象的程序设计语言 C++语言的词法及词法规则 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1.1 面向对象程序设计的有关概念 1.1.1 面向对象的由来和发展 早期的汇编语言比机器语言(二进制码)方便得多。 1.1 面向对象程序设计的有关概念 1.1.1 面向对象的由来和发展 早期的汇编语言比机器语言(二进制码)方便得多。 20世纪50年代中期出现高级程序设计语言FORTRAN。 20世纪50年代后期,Algol通过块结构对变量实施隔离。 20世纪60年代,Simula 67是面向对象语言的鼻祖,提出了对象的概念,使用了类的概念,支持类的继承。 20世纪70年代,Ada语言是支持数据抽象类型的最重要的语言之一,但不全面支持继承,称为基于对象的语言。 Smalltalk语言是最有影响的面向对象语言之一,它和Object-C等都是全新的面向对象语言。 C++对传统语言C进行面向对象的扩展,是混合型语言。 面向对象的语言更接近于自然语言。 东华大学信息科学与技术学院 龚涛
1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 面向对象是一种运用了对象、类、封装、继承和多态性等来构造系统的软件开发方法,面向对象程序设计方法的特征体现于对象、类、封装、继承和多态性。 对象 对象的地位:对象是软件系统的基本构成单位,是研究问题和分析问题的出发点,是构成程序的主要成员。 对象的实质:对象是对客观世界中实际存在的某种事物的抽象,是描述客观事物的一个实体。 对象的定义:对象是一组属性和一组行为的集合,是数据与操作的集合。属性用来描述对象的静态特性,它使用若干数据来表示;行为是用来描述对象的动态特性,它使用若干操作来表示。 对象之间传递信息是通过消息实现的。 东华大学信息科学与技术学院 龚涛
1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 类 封装 类的本质:类是一种由用户定义的自定义类型,称为类类型。 1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 类 类的本质:类是一种由用户定义的自定义类型,称为类类型。 类的定义:类是一种具有共同属性和行为的若干对象的统一描述体,类是创建对象的样板,它包含着所创建对象的数据描述和操作的定义。 分类的思想:分类是人们认识客观世界的一种常用的思维方法,将具有相同属性的事物划分为一类,得到一个抽象的概念,用来表示一类事物。分类的原则是抽象,类是抽象数据类型的实现。 封装 封装是把对象的属性和行为(即数据和操作)结合成为一个封装体,操作是通过函数来实现的,又称为方法。 封装体具有隐藏性,通过称为接口的通道与外界进行联系。 东华大学信息科学与技术学院 龚涛
1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 聚合 继承 1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 聚合 聚合的定义:聚合是类之间的一种包含关系,聚合用来将复杂类表示为若干简单类的对象的集合。 问题归约的思想:在处理一个复杂问题时,常常将复杂问题分解为若干个简单问题,通过逐个解决简单问题来解决复杂问题。 继承 特殊类具有一般类的全部属性和行为,并且它还有自己的属性和行为,此时称特殊类是对一般类的继承。 继承是创建新类的方法之一,可以简化人们对事物的描述,减少冗余性,提高重用性。 可以将已开发好的类存放到类库内,例如Visual C++的基础函数类库MFC。开发新系统时,便可直接使用或继承使用已有的类,这将会减少编程的工作量,并提高编程质量。 东华大学信息科学与技术学院 龚涛
1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 多态性 1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 多态性 多态性是一对多的状态,函数重载和运算符重载是多态性的体现,即一个函数名或同一个运算符对应于不同的实现或功能。 多态性体现在动态联编上。在一般类中定义的行为或方法,被特殊类继承后,可有不同的实现或操作,并在运行中进行联编。 例如,定义一个一般类“几何图形”,它有求面积的方法,在一般类中该方法可以不给出具体的实现。对于该类的特殊类“圆形”、“矩形”、“三角形”等,这些特殊类都继承该一般类,每个特殊类中也都有求面积的方法。这些特殊的求面积方法根据其不同的几何图形具体实现,各个方法的求面积公式是不一样的。在实际操作时根据运行时出现的几何图形,调用对应的求面积方法进行计算,这就是面向对象的多态性。 东华大学信息科学与技术学院 龚涛
1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 面向对象的方法可归纳为以下几点: 1.1 面向对象的由来和发展 1.1.2 面向对象的有关概念 面向对象的方法可归纳为以下几点: 将客观事物中抽象出的数据和方法构成一个集合体,这便是对象,即对实体的描述。 将相同类型的对象抽象出共性,形成类。类具有封装性和隐藏性。 类是一个封装体,类中大多数数据只能通过本类的方法进行处理。这些数据在类外是不可见的,无法访问。 类是通过外部接口与外界联系的,这些外部接口提供了类的行为。 对象之间是通过消息进行通信的。 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1.2 C++语言是一种面向对象的高级语言 1.2.1 C++语言对面向对象程序设计方法的支持 (1) 支持数据封装 将数据和对该数据进行合法操作的函数封装在一起 对数据访问严格控制 (2) 支持类成员的3种访问权限 私有(private)成员:只有在类中说明的函数才能访问私有成员 公有(public)成员:所有类都能访问,这是该类的对外接口 保护(protected)成员:类内函数和该类的派生类能访问 (3) 支持通过发送消息处理对象 C++语言中,每个对象根据所接收到的消息的性质来决定需要采取的行动,以响应这个消息。 送到一个对象的所有可能的消息在对象的类描述中都需要定义,即对每个可能的消息给出一个相应的方法。 东华大学信息科学与技术学院 龚涛
1.2.1 C++语言对面向对象程序设计方法的支持 (4) 支持友元 (5) 支持函数重载和运算符重载 (6) 支持继承性 类的私有成员一般是不允许该类外面的任何函数访问的,但是友元可打破这条禁令。 类中函数如果是友元,就称为友元函数。 类中所包含的类如果是友元,就称为友元类,友元类的所有成员函数都是该类的友元函数。 (5) 支持函数重载和运算符重载 (6) 支持继承性 C++语言支持单继承和多继承。 派生类(子类)继承了基类(父类)的所有数据和方法,此外派生类还可定义所需要的不包含在父类中的数据和方法。 (7) 支持动态联编(虚函数) 东华大学信息科学与技术学院 龚涛
C++语言包含C语言的全部内容,C语言是C++语言的一个子集。 C语言代码为C++语言所用,C++不是纯正的面向对象。 (1) 包容性 C++语言包含C语言的全部内容,C语言是C++语言的一个子集。 C语言代码为C++语言所用,C++不是纯正的面向对象。 (2) 对C语言的改进 增加了运算符; 增加了类型的安全性,严格检查类型转换; 引进了引用; 允许函数重载、内联及设置参数默认值等; 随时可以说明变量。 (3) 本质差别:面向对象与面向过程 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1. 3 C++词法及其规则 1.3.1 C++语言的字符集 大小写英文字母: a~z和A ~ Z 数字字符: 0 ~9 特殊字符: 空格 ! # % ^ & * _ (下划线) - + = ~ < > / \ | . , : ; ? ‘ “ () [] {} 东华大学信息科学与技术学院 龚涛
(1) 标识符 1.3 C++语言的词法及词法规则 1.3.1 C++语言的单词及词法规则 标识符是由程序员定义的单词,用以命名程序中的一些实体,例如函数名、类名、变量名、对象名、标号名、类型名等。 标识符的长度不限,但特定的编译系统能识别的标识符的长度是有限的。 C++语言的标识符由大小写字母、数字字符(0~9)和下划线组成,并且以字母或下划线开始。 标识符中大小写字母是有区别的 用户定义标识符时,不要采用系统的保留字(关键字和设备字等)。 东华大学信息科学与技术学院 龚涛
(2) 关键字 (3)运算符 1.3 C++语言的词法及词法规则 1.3.1 C++语言的单词及词法规则 auto bool break case char catch class const continue default delete do double else enum explicit extern float for friend goto if inline int long mutable new operator private protected public register return short signed sized static static_cast struct switch template this throw true try typedef union unsigned using virtual void volatile while (3)运算符 运算符实际上是系统预定义的函数名字。 分为单目运算符、双目运算符和三目运算符。 东华大学信息科学与技术学院 龚涛
(4) 分隔符 (5) 常量 (6) 注释符(/* */ //) 1.3 C++语言的词法及词法规则 1.3.1 C++语言的单词及词法规则 空格符:单词与单词之间 逗号:说明时变量之间;函数多个参数之间 分号:for循环语句中三个表达式之间 冒号:语句标号;switch语句中关键字case {}:构造程序 (5) 常量 数字常量 字符常量 字符串常量 (6) 注释符(/* */ //) 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1. 4 C++程序结构的特点 1.4.1 C++语言的第1个示例 第1个C++程序示例:求两个浮点数之和 源代码: #include <iostream.h> void main() { double x, y; cout<<"请输入两个浮点数:"; cin>>x>>y; double z=x+y; cout<<"x+y="<<z<<endl; } 东华大学信息科学与技术学院 龚涛
1.4 C++语言结构的特点 1.4.1 C++语言的第1个示例 东华大学信息科学与技术学院 龚涛
1.4 C++语言结构的特点 1.4.1 C++语言的第1个示例 东华大学信息科学与技术学院 龚涛
1.4.2 C++程序的组成部分 1.4 C++语言结构的特点 (1) 包含有C语言程序的组成部分 (2) C++程序中出现类和对象 预处理命令:以“#”开头的命令,包括宏定义命令、文件包含命令和条件编译命令。 输入输出语句(不同于C语言) 使用提取符“>>”的键盘输入操作: cin>>(变量1)>>(变量2) … 使用插入符“<<”的屏幕输出操作: cout<<(表达式1)<<(表达式2) … 函数:C++程序→文件→函数 语句:表达式语句、空语句、复合语句、分支语句、循环语句等 变量和常量(常量定义不同于C语言) (2) C++程序中出现类和对象 东华大学信息科学与技术学院 龚涛
1.4.3 C++程序的书写格式 (1) 与C语言相同部分的书写与C语言相同 (2) 类及对象按定义的格式书写 1.4 C++语言结构的特点 一行一般写一条语句,分行原则是不能将一个单词分开。短语句可以一行写多条,长语句可以一条写多行。 书写C++程序时尽量提高可读性,[例1. 2]与[例1. 3]说明了程序的书写格式影响可读性。 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1. 5 C++程序的实现 1.5.1 C++语言程序实现的三步曲 (1) 编辑 (2) 编译(预处理、编译、连接) 词法分析、语法分析 生成符号表、进行错误处理、生成目标代码 (3) 运行 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1.5.2 Visual C++ 6.0版本实现C++程序 Visual C++ 6.0版本是当前国内比较流行的一种C++编译系统,功能较强,需要在Windows 9X和NT系统上运行。 (1) 单文件程序的实现方法 以[例1. 4]为例,打开菜单【文件】|【新建】|【文件】|C++ Source File,创建C++程序文件f1.cpp。 (2) 多文件程序的实现方法 以[例1.5]为例,创建C++程序文件f2.cpp和f3.cpp,创建新的项目文件,向项目文件中添加C++程序文件;再编译连接项目文件,最后运行项目文件。 东华大学信息科学与技术学院 龚涛
第1章 C++语言概述 1.5.2 Visual C++ 6.0版本实现C++程序 东华大学信息科学与技术学院 龚涛
答疑联系信息 办公室电话:021-67792312 手机:18201798064 E-mail:taogong@dhu.edu.cn 办公室地址:2号学院楼518室 QQ:5763698 东华大学信息科学与技术学院 龚涛