1.1k likes | 1.34k Views
VISUAL C++ 程序设计基础. 主讲:张道德 湖北工业大学机械电子工程系 2005.3 E-mail:hgzdd@126.com QQ:461889699. 参考书目. VC++ 教材 Visual C++6.0 编程基础 . 王世同 . 清华大学出版社 Visual C++6 24 小时学习教程 .Mickey Williams 蓍 . 康博创作室译 . 机械工业出版社 Visual C++ 面向对象可视化程序设计,黄维通 . 清华大学出版社 精通 MFC. 刘思华 . 电子工业出版社 . C ++教材
E N D
VISUAL C++ 程序设计基础 主讲:张道德 湖北工业大学机械电子工程系 2005.3 E-mail:hgzdd@126.com QQ:461889699
参考书目 VC++教材 • Visual C++6.0 编程基础.王世同.清华大学出版社 • Visual C++624小时学习教程.Mickey Williams 蓍.康博创作室译.机械工业出版社 • Visual C++面向对象可视化程序设计,黄维通.清华大学出版社 • 精通MFC.刘思华.电子工业出版社. C++教材 • C++程序设计教程.钱能.清华大学出版社 • C++程序设计习题及解答.钱能.清华大学出版社 • 面对对象程序设计循序渐近.田志良等.学苑出版社
主要学习内容 • 面对对象编程及C++基础知识 • Windows编程基础知识 • Visual C++基础编程 • MFC程序设计开发
C++基础知识目录 第一章 软件设计概论 第二章 C++基础知识(1) 第二章 C++基础知识(2)-类与对象 第二章 C++基础知识(3)-继承与多态 第三章 动态内存分配 第四章 异常处理 第五章 输入/输出流类库及标准模板类库(STL)
第一章 软件设计概述 1.4 算法的设计与分析 1.1软件与软件危机 1.5 C语言和面向对象的C++ 1.2软 件 工 程 1.3程序设计方法 1.6 一个简单的C++程序
1.1软件与软件危机 什么是软件 软件 程序 什么是软件危机 软件危机首次爆发于二十世纪六十年代。在大型程序设计中,人们发现投入大量的人力、物力、时间开发出的软件,其成本、效率、质量等方面却处于失控状态,尤其软件维护异常困难。程序的修改扩充往往需要大量重复性投入。
1.1软件与软件危机 软件危机产生的原因主要有三个: 1软件开发者不熟悉用户问题的领域,或没有理解用户需求,软件产品与要求不一致。 2软件是一种逻辑产品而非物理产品,软件的开发过程本质上是人的思考过程。 3人的智力在面对越来越复杂的问题时,处理问题的效率会越来越低。
1.2 软件工程 软件危机的 出现迫使人们重新认识软件和软件开发过程。 大型软件开发也应该借鉴建筑、机械等行业的发展过程,由“手工方式”向“工程化”方向发展。1968年在北大西洋公约组织(NATO)的年会上首次提出软件工程的概念,此后又逐步提出软件生命期的概念。
1.2 软件工程 软件工程的提出和软件的定义 软件是程序、方法、规则、相关文档以及在计算机上运行所必需的数据的集合。而软件工程是开发、运行、维护软件的系统方法。 软件生命期 软件生命期指从开始研制到废弃不用的整个期间,可划分为五个阶段:需求分析、设计、编程、测试和运行维护。 软件的质量标准 正确性健壮性可维护性 可用性 可重用性 效率等
1.2 软件工程 正确性 软件的正确性指的是软件系统在正常条件下能够正确工作,完成规定功能。这是软件的首要指标。 例如,要求设计程序,输入一批数据,计算它们的累加和。在这里,正确性就是正确能正确计算累加和。
1.2 软件工程 健壮性 软件的健壮性指的是在意外情况下(如输入数据不合理或某些硬件故障),软件系统仍能适当地工作,并对意外情况进行适当处理,而不致于导致错误结果甚至系统的瘫痪或死机。 例如,要求设计程序,根据输入的三边a、b、c的长度判别三角形类型。现有如下设计思想:若a、b、c中只有两个量相等,则为等腰三角形,若三个量均相等,则为等边三角形,否则为一般三角形。如果输入为(-2,-2,-2)时,程序输出为:等边三角形。这个结果显然是错误的。这是由于程序对不合理数据不能进行适当处理,我们就说这个程序的健壮性不好。
1.2 软件工程 可维护性 软件的维护包括发现并改正软件的错误,以及由于软件运行环境发生变化或软件功能扩充而对软件进行的改动。 软件的可维护性指的是软件容易维护的程度。一般地说,软件的可读性好,容易理解,维护起来也就比较容易。因此可读性是可维护性的基础。
1.3 程序设计方法 1.3.1传 统 的 结 构 化 程 序 设 计 SP (Structured Programming) 1.3.2面 向 对 象 的 程 序 设 计 OOP (Object Oriented Programming)
1.3.1 传统的结构化程序设计 传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是将数据与程序分开存储,即数据与数据处理分离。 结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。
程 序 模块 1 模块 2 模块 3 1.1 1.2 1.3 2.1 2.2 3.1 3.2 1.3.1 1.3.2 1.3.3 3.1.1 3.1.2 1.3.1 传统的结构化程序设计
1. 读入数据; 正整数个数为0;负整数个数0; 取第一个整数 2. 统计正数、负数的个数; 2.1 如果该数大于 0,正整数个数加1; 2.2 如果该数小于0,负整数个数加1; 2.3: 取下一个整数; 重复 至统 计完 3. 输出结果; 1.3.1 传统的结构化程序设计 举一个简单的例子,要求读入一组整数,统计其中正整数和负整数的个数。 该任务的模块结构及细化过程如下:
1.3.1 传统的结构化程序设计 结构化程序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷: (1)难以适应大型软件的设计。 (2)程序可重用性差。
1.3.2 面向对象的程序设计 为什么要引入面向对象的设计方法 面向对象的设计方法与面向过程的设计方法有什么关系
1.3.2 面向对象的程序设计 面向过程程序设计缺点的根源在于数据与数据处理分离。 面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object),同类对象还可抽象出共性,形成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。
1.3.2 面向对象的程序设计 1 基 本 概 念 2 面向对象的软件开发方法 3“面向对象”程序设计的特点
基 本 概 念 对 象(object) 类(class) 消 息(message)
表针 旋钮 其他机械机构 属性 行为 1 基 本 概 念 对 象 调节旋钮
类的一个具体实现,称为实例 类对象 描述这类对象共有的、本质的属性和行为 具体到一只圆形的或方形的手表 手表一块手表 手表共有的属性(表针、旋钮、内部结构) 和行为(调节旋钮) 1 基 本 概 念 类 类是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和行为。
发送消息 接收并响应消息 基 本 概 念 消 息 我们把对象之间产生相互作用所传递的信息称做消息。 启 动
发送消息 接收并响应消息 1 基 本 概 念 消 息 我们把对象之间产生相互作用所传递的信息称做消息。 转 向
面向对象的软件开发方法 面向对象软件开发的根本合理性在于它符合可观世界的组成方式和大脑的思维方式。 在大型程序开发过程中,编码只是其中很小一部分,应当采用工程化的方法,并将面向对象的思想贯穿于软件开发全过程,这就是面向对象的软件工程。 面相对象的软件工程同样遵循分层抽象、逐步细化的原则。软件开发过程包括以下五个阶段:
面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程(OOP) 面向对象的测试(OOT) 面向对象的维护(OOSM) 面向对象的软件开发方法 分析阶段的主要任务是按照面向对象的概念和方法,从问题中识别出有意义的对象,以及对象的属性、行为和对象间的通信,进而抽象出类结构,最终将它们描述出来,形成一个需求模型。 设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。 编程阶段实现由设计表示到面向对象程序设计语言描述的转换。 测试的任务在于发现并改正程序中的错误。
“面向对象”程序设计的特点 • 封装性 (2) 继承与派生性 (3) 多态性
内 外 机械零件 动作 调节旋钮 读表盘 3 “面向对象”程序设计的特点 封装性 对象是一个封装体,在其中封装了该对象的属性和操作。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。 C++通过建立数据类型——类来支持封装和数据隐藏。封装性增加了对象的独立性,从而保证了数据的可靠性。一个定义完好的类可以作为独立模块使用。
汽车 载人 载货 客车 货车 小,速度快 大,速度慢 小轿车 大客车 3 “面向对象”程序设计的特点 继承与派生 以汽车为例看客观世界描述事物的方式: 面向对象程序设计提供了类似的机制: 当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。 新类称为子类或派生类,原来的类称为基类。派生可以一直进行下去,形成一个派生树。 继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
“面向对象”程序设计的特点 多态性 多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。 高中生 语文、数学、英语、政治、物理、化学、生物 计 算平均成绩
“面向对象”程序设计的特点 多态性 多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。 大学生 高数、英语、计算机、线性代数 计 算平均成绩
“面向对象”程序设计的特点 继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。
1.4 算法的设计与分析 1.4.1 算 法 的 概 念 1.4.2 算法的表示及三种基本结构 1.4.3 常 用 算 法 介 绍 1.4.4 算 法 的 时 空 复 杂 度
1.4.1 算 法 的 概 念 • 通俗地说,算法就是解决问题的步骤。 • 用计算机解决问题的算法应具有以下特征: • 可执行性 • 确定性 • 有穷性 • 可输入输出信息
1.4.2算法的表示及三种基本结构 1 顺 序 结 构 2 分 支 结 构 3 循 环 结 构
块1 块2 块3 流程图 1.4.2算法的表示及三种基本结构 (1) 顺序结构 【例1.1】求两数之和。 num115; num220; sumnum1+num2; 输出sum;
num1 块1 块2 块3 流程图 1.4.2算法的表示及三种基本结构 (1) 顺序结构 【例1.1】求两数之和。 num115; 15 num220; sumnum1+num2; 输出sum;
num1 num2 块1 块2 块3 15 流程图 1.4.2算法的表示及三种基本结构 (1) 顺序结构 【例1.1】求两数之和。 num115; num220; 20 sumnum1+num2; 输出sum;
num2 num1 块1 块2 块3 15 寄存器 sum 流程图 1.4.2算法的表示及三种基本结构 (1) 顺序结构 【例1.1】求两数之和。 num115; 35 + num220; 20 20 sumnum1+num2; 输出sum; 35
块1 块2 块3 num1 寄存器 num2 sum 流程图 1.4.2算法的表示及三种基本结构 (1) 顺序结构 显示结果:35 【例1.1】求两数之和。 num115; 15 35 + num220; 20 sumnum1+num2; 输出sum; 35
条件 (2) 分支结构 块1 块2 真 假 流程图 1.4.2算法的表示及三种基本结构 【例1.2】输入三个数,输出其中的最大数。 x7; y12; z10; if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 (2) 分支结构: 块1 块2 x 真 假 流程图 1.4.2算法的表示及三种基本结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; z10; if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 (2) 分支结构 块1 块2 y x 真 假 流程图 1.4.2算法的表示及三种基本结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; 12 z10; if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 块1 块2 z x y 真 假 流程图 1.4.2算法的表示及三种基本结构 (2) 分支结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; 12 z10; 10 if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 块1 块2 z y x 寄存器 真 假 比较 max 流程图 1.4.2算法的表示及三种基本结构 (2) 分支结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; 12 z10; 10 12 if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 块1 块2 y x z 寄存器 真 假 比较 比较 max 流程图 1.4.2算法的表示及三种基本结构 (2) 分支结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; 12 z10; 10 12 if(x>y) maxx; else max y; if (z>max) maxz; 输出max;
条件 块1 块2 z x y 寄存器 真 假 比较 比较 max 流程图 1.4.2算法的表示及三种基本结构 (2) 分支结构 【例1.2】输入三个数,输出其中的最大数。 7 x7; y12; 12 z10; 10 12 if(x>y) maxx; else max y; 显示结果:12 if (z>max) maxz; 输出max;
条件 (3) 循环结构 真 假 块 流程图 1.4.2算法的表示及三种基本结构 【例1.3】求4个整数的和。 count4; //整数个数 sum0; //累加和的初值 while (count>0) { x输入一个整数; sumsum+x; countcount-1; } 输出sum;
条件 (3) 循环结构 count 真 假 sum 块 流程图 1.4.2算法的表示及三种基本结构 【例1.3】求4个整数的和。 4 count4; //整数个数 sum0; //累加和的初值 0 while (count>0) { x输入一个整数; sumsum+x; countcount-1; } 输出sum;