四川大学计算机学院精品课程,面向对象程序设计C,游洪越,第一课件_第1页
四川大学计算机学院精品课程,面向对象程序设计C,游洪越,第一课件_第2页
四川大学计算机学院精品课程,面向对象程序设计C,游洪越,第一课件_第3页
四川大学计算机学院精品课程,面向对象程序设计C,游洪越,第一课件_第4页
四川大学计算机学院精品课程,面向对象程序设计C,游洪越,第一课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

主讲教师:个人主页:/~youhongyue邮件地址:高级语言程序设计II四川大学计算机学院四川大学计算机学院1教材:《C++面向对象程序设计》李涛主编游洪跃陈良银李琳等编高等教育出版社2006年2月出版2本书内容

第1章绪论第2章C++类和对象第3章继承第4章多态性第5章模板第6章C++常见问题第7章VisualC++编程基础第8章对话框、常用消息、菜单和工具条第9章单文档界面和多文档界面第10章图形设备接口实验(待安排)3561.1程序设计语言发展概况1.1.1机器语言和汇编语言机器语言(二进制码)由0、1二进制代码组成,直接控制CPU的运行工作。例如:01代表“加”001代表寄存器“A”10代表“减”010代表寄存器“B”11代表“乘”011代表寄存器“C”…………操作数可设计为用8位二进制数表达……71.1程序设计语言发展概况1结构化程序设计高级程序设计语言的出现是计算机科学技术发展史上的一个里程碑。它屏蔽了机器的细节,提高了语言的抽象层次,程序员可以用接近自然语言的程序语言编制软件,然后通过编译器转换成机器可执行的代码(机器语言)。危机随着软件大规模的应用,由软件错误而引起的信息丢失、系统报废事件屡有发生,从而导致了软件危机的出现。怎么解决???91.1程序设计语言发展概况结构化程序设计

瑞士计算机科学家NiklausWirth首次提出了“结构化程序设计”(structuredprogramming)的概念。“自顶向下”“逐步求精”概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步的程序抽象度有所降低,最后一步即为可执行的程序。101.1程序设计语言发展概况面向对象程序设计面向对象语言发展:20世纪60年代中期,Simula67语言

面向对象语言的鼻祖,提出了对象、类的概念,并支持类的继承。20世纪70年代中期,Smalltalk语言

最有影响的面向对象语言之一,丰富了面向对象的概念。20世纪80年代中期后出现C++、ObjectPASCAL、Java等多种面向对象语言面向对象基本思想:客观世界由对象组成,对象具有其属性和行为。111.2面向对象程序设计语言的基本原理一、认识事物的过程:事物--属性如:自行车--自行车颜色整体—组成部分如:自行车—车轮类—类如:山地车—公路赛车二、面向对象客观事物:具有属性和行为的对象。通过抽象机制找出同一类对象的共同属性和行为,形成类。对象是类的实例。类通过外部接口与外界发生关系。对象与对象之间通过消息传递机制进行通信。131.2面向对象程序设计语言的基本原理1.2.1抽象抽象:把客观世界的事物划分成类的过程。程序设计:面向问题空间与面向解空间;面向过程程序设计面向解空间,关注求解,程序=过程+调用面向对象程序设计面向问题空间,关注问题本身,对问题建模,抽象出类,形成对象程序=对象+消息14问题空间中,抽象出类的过程:1.2面向对象程序设计语言的基本原理数据抽象抽象出事物共有的属性或状态

--类的

属性行为抽象抽象出事物共有的行为或功能

--类的

操作15类与对象:从所有员工共性中抽象出一个员工类,每个员工属于该类的一个对象。类中所有对象共享

——类中所有共同的特性.

类是对象的抽象

对象是类的实例

1.2面向对象程序设计语言的基本原理17面向对象的两个重要原理:

数据抽象、行为共享1.数据抽象:通过从特定的实例中抽取共同性质以形成一般化的概念的过程。——获取共性强调部分特性(用户所关心的特性)忽略其他特性(用户不关心的特性)用户:只关心做什么,不关心怎么做OOP技术比任何一种编程技术都更强调抽象在软件开发中的重要性。1.2面向对象程序设计语言的基本原理182.行为共享:(1)实体(模块)的外部接口称为行为。(2)行为共享允许多个实体(模块)具有相同的接口集。——接口一致。(3)行为共享增强系统的灵活性(4)行为共享增强系统的抽象1.2面向对象程序设计语言的基本原理19

封装:数据和加工处理该数据的方法紧密结合在一起构成黑匣子的整体。封装就是将一组数据和这组数据的有关操作组装在一起形成一个对象。封装实现了信息隐藏。私有数据不能被该对象的成员函数之外的任何其它函数所直接使用。1.2面向对象程序设计语言的基本原理211.2面向对象程序设计语言的基本原理1.2.3继承性客观世界:一般和特殊一般是某类事物的共性;特殊具有一般的特性,同时又有自己的新特性。面向对象程序设计利用继承机制来将这种关系模型化,从而达到代码重用的目的。221.2面向对象程序设计语言的基本原理图1.1动物的分类231.2面向对象程序设计语言的基本原理1.2.4多态性客观世界:一个抽象的信息,具有多重含义。程序设计语言:同一个函数或运算符可以有不同的执行方式,用哪一种方式取决于它所操作的内容。这即为程序设计语言中的多态性(polymorphism)。函数重载:同一个函数名被赋予不同的功能实现。

具体地讲是指在同一作用域内函数名相同,形参类型或个数不同的多个同名函数称为函数重载voidFunction(int,float);

voidFunction(float);floatFunction(float);

251.2面向对象程序设计语言的基本原理一个界面(相同函数名)多种实现(不同函数体),编译器根据实参表与形参表的类型匹配来选择相应的函数实现。

“早捆绑(earlybinding)”:指在编译阶段把函数调用和相应的函数体进行匹配。注意:第二和第三个函数不是真正意义上的函数重载!因为它们具有相同的形参表,调用时也对应相同的实参表,因此编译器不能进行正确的匹配。261.2面向对象程序设计语言的基本原理1.2.5消息传递机制在面向对象技术中,对象间的交互是通过消息的传递来完成的。

消息处理方法就是对象的成员函数。例子:291.2面向对象程序设计语言的基本原理如何与CLight类的实例对象进行通信?CLightlight;//创建一个名为light的对象light.On();//通过对象调用On()函数Windows操作系统也是以消息为基础,事件为驱动的。Microsoft的MFC拥有自己的一套支持Windows操作系统消息传递机制的技术——消息映射(MessageMapping)和命令传递(CommandRouting)。301.3面向对象程序设计C++C++是从C语言发展演变而来的1998年11月ISOC++标准正式确立1.3.1C++语言特点用C语言开发的软件都能在C++环境中继续使用并扩充代码。

1一个更好的C引用更方便操作函数参数和返回值函数重载对不同的函数使用相同的名字命名空间改进了对程序中各种名字的控制311.3面向对象程序设计C++2系统更容易表达和理解

面向对象3源代码重用模版(template)4.错误处理异常处理(exceptionhandling)5.大型程序设计中的命名空间问题:程序达到一定规模后,给函数和标识符命名的新名称不够用,不同的程序员或开发小组分别开发各自的程序块,名称很容易冲突。321.3面向对象程序设计C++解决:命名空间(namespace)程序中每个C++定义集被封装在一个命名空间中,不同命名空间的名字互不冲突。331.3面向对象程序设计C++1.3.2C++程序架构1一个简单的C++程序例1.1"Hello,World!"程序//主文件//文件名smain1_1.cpp#include<iostream>//编译预处理命令usingnamespacestd;//命名空间voidmain(void)//主函数{

cout<<"Hello,World!"<<endl;//C++输出语句}运行结果Hello,World!341.3面向对象程序设计C++2程序基本结构1.编译预处理命令

C++提供了三类预处理命令:文件包含命令、宏定义命令和条件编译命令。(1)文件包含命令

#include<文件名>

#include"文件名"(2)宏定义命令#define#undef

351.3面向对象程序设计C++(3)条件编译命令第一种形式

#ifdef<标识符><程序段1>#else<程序段2>#endif第二种形式

#ifndef<标识符><程序段1>#else<程序段2>#endif361.3面向对象程序设计C++第三种形式#if<表达式1><程序段1>//当<表达式1>为真时编译<程序段1>

#elif<表达式2><程序段2>//当<表达式1>为假而<表达式2>为真时编译<程序段2>

……#elif<表达式n><程序段n>//当<表达式1>到<表达式n-1>都为假而<表达式n>为真时

//编译<程序段n>

#else<程序段n+1>//其他情况时编译<程序段n+1>

#endif371.3面向对象程序设计C++2.针对命名空间的指令usingnamespacestd所有的标准C++库都封装在一个名字空间中即“std”,(代表“standard”)。

但在传统的C++中无命名空间std。3.主函数每个C++程序都有且只有一个主函数main(),它是程序执行的起点。4.输入输出命令

数据在对象之间的流动抽象为“流”。数据的输入、输出通过I/O流来实现的。cin、cout是预定义的流类对象。cin--标准输入cout--标准输出381.3面向对象程序设计C++5.注释1./*…*/多行信息的注释。2.//单行信息的注释。3良好的书写规范推荐的书写规范:匈牙利命名法

1.程序的版式每一行只写一条语句,便于在后面添加注释;程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐;{}之内的代码块在‘{’右边数格处左对齐。391.3面向对象程序设计C++例子:String::String(constchar*ch)

{//’{‘独占一行并且与’}‘位于同一列

if(ch){data=newchar[strlen(ch)+1];

//’{}’之内的代码块在‘{’右边数格处左对齐

strcpy(data,ch);

//’{}’之内的代码块在‘{’右边数格处左对齐

}}//‘}’独占一行并且与‘{’位于同一列

401.3面向对象程序设计C++2.命名规则变量名

变量名的命名规则:“属性+类型+对象描述”

属性标注:全局变量(global)g_;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论