




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Welcome to C+ world !,C+面向对象程序设计,软件学院软件工程系任课教师: 田琳琳,从C到C+,C+起源主要过渡特性面向对象与面向过程,1.由C到C+的演化,1978年,Kernighan & Ritchie The C Programming Language 1990年,C的标准化 优点 高效灵活,功能和表达丰富,可移植性好; 操作系统的开发工具局限 类型检查机制较弱 不支持代码重用,面向过程程序设计 设计思想 procedural programming 将复杂过程简单的按功能分层,从而解决问题。 规范的过程化程序过程的功能划分与过程内部的编写,1.由C到C+的演化,C程序的结构图,面向过程的C程序,1.由C到C+的演化,1980年,Bell的Bjarne Stroustrup推出C+。 C+是C的改进和扩充C+语言包括过程性语言和类两部分。 保持了C的简洁性和高效性。支持面向对象的程序设计 ( OOP, Object Oriented Programming)C+程序由类(class)和函数(function)组成。,C+的历史,Bjarne Stroustrup-C+之父主页: /bs//经典巨作:The C+ Programming LanguageThe Design and Evolution of C+ 中文版:C+程序语言设计C+语言的设计和演化,C+程序设计,程序控制结构,函数,数组与指针,结构,面向对象程序设计方法,设计和实现C+语言时,既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,编写出的程序具有结构清晰、易于扩充等优良特性,适合于各种应用软件、系统软件的程序设计。 C+语言由C语言扩展而来,同时它又对C语言的发展产生了一定的影响,ANSI C语言在标准化过程中吸收了C+语言中某些语言成分。,From C to C+ C语言与C+的关系,2. C+对C语言的扩展,C+语言对C语言在结构化方面相应的扩展:,头文件与库函数输入输出语句关键字常量与变量基本类型函数,按引用传递数据函数重载,(1)头文件与流对象 #include : 包含的头文件 using namespace std; : 名字空间 提取运算符,2. C+对C语言的扩展,stdio.h printf() scanf(),iostream.h cout ,(2)程序块中的变量声明 将几个语句用大括号 组合起来就构成了一个程序块。 在C语言中,变量的声明只允许出现在程序块的开始; 而在C+语言中变量声明可以出现在任何位置。,2. C+对C语言的扩展,如下面的程序片断:for( int i=0; i10; i+) sum+=i; ,2. C+对C语言的扩展,(3)常量 C+语言中增加了常量类型用标识符const声明,其值在作用域内保持不变 const int maxSize=128; const int iArray =1,2,3,4,5,6; char * const str1= Hello world! ; const char *str2 = Hello, C+;,#define / const,2. C+对C语言的扩展,(4)基本类型布尔型: bool flag = true ; flag = false;枚举型: enum WeekDay = Sun,Mon,Tue,Wed,Thu,Fri,Sat ; WeekDay today = Wed ; 结构体 struct Student ; Student stu;类类型 class Person ; Person teacher 4 ;,2. C+对C语言的扩展,(5)作用域标识符增加了作用域标识符:(名字解析运算符),以解决局部变量名与全局变量的同名重复问题。在局部变量的作用域内可用作用域标识符:对被其隐藏的同名全局变量进行访问。int x=0;void test(int x)x=5; /此处引用局部变量:x=9;/此处引用全局变量,2. C+对C语言的扩展,(6)动态空间申请new 与delete的用法int *p1 = (int *)malloc(sizeof(int) * length); free(p1);int *p2 = new int length ;delete p2;/ 释放数组用法delete p2; / 释放单个元素,new Vs malloc,1、new 是c+中的操作符, malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数; 而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏Memory leak,2. C+对C语言的扩展,C+程序中的函数,函数的声明函数的定义函数参数传递和返回值 参数的按值/ 按地址/ 按引用传递函数的调用 递归与迭代内联函数 默认参数 函数重载与函数模板,示例程序 swap.cpp课堂练习 将swap2.c按要求改成能够正确运行的CPP程序,C+函数调用中的数据传递,1。 参数的按值传递,数按值调用传递时,生成实际参数值副本并传给被调用 函数的形式参数。 副本(行参)的改变并不影响调用者的原始变量值 (实参). 函数内对形参的访问、修改,都在形参的标识对象进 函数返回时,形参对象被撤消,不影响实参的值 防止意外的副作用影响开发正确、可靠的软件系统。 值传送的实参可以是常量、有确定值的变量或表达式 函数返回值通过匿名对象传递,/ 例 交换对象的值# include void swap ( int , int ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( a , b ) ; cout after swapping. n ; cout a = a , b = b endl ;void swap ( int x , int y ) int temp = x ; x = y ; y = temp ;,x,y,8,3,通过地址传递实参数据形参指针对应的实际参数是地址表达式,即对象的指针;实际参数把对象的地址值赋给形式参数名标识的指针变量;被调用函数通过形参指针间接访问实参所指对象;,2。 参数的按地址传递,/ 例 交换对象的值# include void swap ( int * , int * ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( ,*x *y,/ 例 交换对象的值# include void swap ( int * , int * ) ;void main ( ) int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( ,3. 按引用传递参数,对一个数据可以使用“引用”(reference)的方式声明, 引用的作用是为一个变量起一个别名 这是C+对C的一个重要扩充,引用是一种新的变量类型。 一般形式: Type / a = 20 声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值。 b和a占内存中的同一个存储单元,它们具有同一地址。,b,使用引用的常见错误在一条语句中声明多个引用时应逐一声明 int,3. 按引用传递参数,void main ( ) int number=20; . cout change_it(number); cout number; ,int change_it (int,引用参数int&value=number,直接引用number,返回value值的副本给调用函数,3。参数的按引用传递,形参为实参的引用形式,扩充函数传递数据的功能引用参数即函数的参数是按引用传递, 引用参数为调用函数中实参的别名。引用参数形式 在函数原型中该参数类型后面加上&,fuc( int &count) 在函数调用中,只指定变量名,该变量通过引用传递。被调用函数可直接修改原始变量(实参) 在被调用函数体中,通过参数名指定的变量实际上就是 引用调用函数中的原始变量。,3. 按引用传递参数,引用传递的特点消除了复制大量数据的开销,有利提高执行效率;在被调用函数中直接使用形参变量,提高可读性;安全性较差,被调用函数能直接访问和修改调用者的数据。 若要传递较大的对象,用常量引用参数模拟按值调用 要指定引用常量,在参数声明的类型说明符前面加上const。,int change_it ( const int& value);,3。参数的按引用传递,(7)引用引用的目的是为了消除指针引用顾名思义就是引用这个变量引用必须初始化。引用总是指向在初始化时被指定的对象,以后不能改变。不存在指向空值的引用。所以在使用引用之前不需要测试它的合法性。int a;int ,C+对C语言的扩展,C+特性:引用,内联函数inline C+为降低小程序调用开销的一种机制。默认参数值 default parameter value 函数参数的默认值使得在函数调用时可不指定参数。重载函数 overloaded function 函数重载是以同一个名字命名多个函数实现版本 。,(8)函数重载C+语言可实现函数重载,即多个函数在同一作用域可以用相同的函数名,编译器在编译时可以根据实参的类型来选择应该调用的函数。在C+中,对相同功能但参数类型不同的函数可以使用相同的函数名,在调用时无需记忆多个函数名,而由编译器根据参数类型选择。,2. C+对C语言的扩展,int iNum1=5,y=iNum2;double dNum1=1.2, dNum2=2.3;float fNum1=1.1f, fNum2=2.2f;cout compare(iNum1,iNum2) compare(dNum1,dNum2) y) return 1; else return 0;int compare( float x, float y) if(xy) return 0; else return 1; int compare( double x, double y) if(xy) return 0; return 1; int compare(char c1, char c2) return c1c2? 0 : 1; ,重载函数,(9) 缺省参数 在C+语言中,函数参数允许使用缺省值。当函数调用时,若给出的参数个数少于函数表中参数的总数时,则所缺参数自动取函数参数表中设置的缺省值。 void f(int x, int y=10)。 f(2);/f(2,10)。 函数可以有多个缺省参数,但应注意只能从右往左缺省,例如: int f1(int x, int y=0, int z=0); /正确 int f2(int x, int y=0, int z); /错误,2. C+对C语言的扩展,3.面向对象思想概述,面向对象的编程思想力图使在计算机语言中对事物的的描述与现实世界中该事物的本来面目尽可能的一致。 类(class)和对象(object)是面向对象方法的核心概念。 类是对一类事物描述,是抽象的、概念上的定义; 对象是实际存在的该类事物的每个个体,也称实例(instance)。,面向过程程序设计,设计思想 procedural programming 将复杂过程简单的按功能分层,从而解决问题。 过程化编程是面向操作的(action-oriented)结构化: 描述任何实体的操作的序列只需三种基本控制结构模块化设计: 程序设计中各个过程体和组成部分用模块表示过程化设计方法: 自顶向下,逐步细化,函数,对象 = 算法 数据结构,程序 = (对象+对象+对象+) + 消息,程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和开发环境,发送消息,面向对象程序设计,类 class类封装了一组数据结构和作用于该数据结构的一组方法.面向对象语言必需提供的用户定义的数据类型 把具有相同属性的事物划分为一类,它将具有相同状态、操作和访问机制的多个对象抽象成为一个对象类。,面向对象程序设计,对象 object 构成世界的一个独立单位,它具有自己的静态特征(状态)和动态特征(操作)。静态特征即可以用某种数据来描述的特征动态特征即对象所表现的行为或对象所具有的功能。类给出了属于该类的全部对象的抽象定义,对象则是符合这种定义的一个实体。一个对象又称类的一个实例。,Class & Object,属性数据,行为方法,实例化,Class & Object,抽象,问题:输入圆的半径,求圆的周长和面积,数据描述:半径,周长,面积均用实型数表示数据处理:输入半径 r;计算周长 = 2*r ;计算面积 = pi * r2 ;输出周长,面积;,结构化编程的方法,一个简单的C+程序,用面向对象方法编程,分析,“圆”是抽象的类类型,建立具体的圆(对象),半径?,圆的周长 ?圆的面积 ?,实例化,问题:输入圆的半径,求圆的周长和面积,用面向对象方法编程,求圆的周长和面积,分析,圆类 数据成员 半径 成员函数 置半径值 求圆的半径 求周长 求面积,实例化,面向对象 vs 面向过程设计,1. 抽象(abstraction) 抽象的过程是将有关事物的共性归纳、 集中的过程。 抽象的作用是表示同一类事物的本质。 C+中的数据类型就是对一批具体的数 的抽象。 对象是具体存在的,可以将其抽象为一 种类型。 类是对象的抽象,而对象则是 类的特例,或者说是类的具体表现形式。,2. 封装(encapsulate)把全部属性和全部行为封装在一起,形成一个不可分割的独立单位(即对象)。 信息隐蔽(information hiding) 对象的外部不能直接地存取对象属性,只能通过几个允许外部使用的服务与对象发生联系。对象间通过发送消息进行交互.,接受消息的对象,发送消息的对象,发送消息,服务器 客户,3. 继承 (inheritance)软件重用”(software reusability) 采用继承的方法可以很方便地利用一个已有的类建立一个新的类。 类与类之间可以组成继承层次 一个类的定义(派生类)可以定义在另一个已定义类(基类 )的基础上。派生类可以继承基类中的属性和操作,也可以定义自己的属性和操作。,4. 多态性(polymorphism) 由继承而产生的相关的不同的类,其对象 对同一消息会作出不同的响应。 对象的多态性是指在一般类中定义的属性 或操作被特殊类继承之后,可以具有不同 的数据类型或表现出不同的行为。这使得 同一个属性或操作名在一般类及其各个特 殊类中具有不同的语义。多态性增加程序的灵活性。,自学内容:基本输入输出方法常量const的定义与使用带默认参数的函数的声明与调用重载函数的定义与调用内联函数的使用程序设计题目上机实验,课后作业,课后试验1. 实验目的 目的: 快速掌握C+语言编程的方法,在小范围内增强C+的功能, 规范编程,复习常用调式技巧 主要内容有:(1)输入流、输出流的使用;(2) new和delete运算符分配内存。(3)函数的调用及按引用传递参数;(4)重载函数的定义及调用(5)常用调式方法,课后试验2实验内容:(1)编写计算器程序:从键盘输入两个数和运算符(加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西省肿瘤医院抚州医院(抚州市立医院)招聘第二批编外人员30人考前自测高频考点模拟试题含答案详解
- 2025福建海峡银行总行授信评审部诚聘英才考前自测高频考点模拟试题及参考答案详解
- 2025湖南省烟草专卖局系统聘用工作人员模拟试卷及参考答案详解一套
- 2025年福建省晋江晋文坊商业管理有限公司招聘4人模拟试卷有完整答案详解
- 2025年春季三峡陆上新能源总部(内蒙古三峡陆上新能源投资有限公司)校园招聘考前自测高频考点模拟试题及一套完整答案详解
- 2025江苏无锡市滨湖区卫生健康系统事业单位招聘高端、紧缺性人才14人(长期)考前自测高频考点模拟试题及答案详解参考
- 2025年4月四川广安理工学院筹建处引进高层次人才17人模拟试卷(含答案详解)
- 2025年甘肃警察学院考核招聘急需紧缺专业人才考前自测高频考点模拟试题附答案详解(完整版)
- 2025河南投资集团工程管理有限公司社招1人考前自测高频考点模拟试题及答案详解(新)
- 2025年春季中国电子校园招聘模拟试卷及1套参考答案详解
- 专项质量护理管理制度
- 现金采取限额管理制度
- 2025-2031年中国污水处理及其再生利用市场深度分析及投资战略咨询报告
- 机械加工生产工艺流程图
- (高清版)DB41∕T 742-2012 公路折线配筋先张法预应力混凝土梁设计施工规范
- 国开(四川)2024年秋《地域文化》形考任务1-2答案终结性考核答案
- 高中数学大题各题型答题模板+必背公式
- 2024年秋新人教版七年级上册历史教学课件 第8课 夏商周时期的科技与文化
- 自考08257《舆论学》备考试题库(含答案)
- 高考生物必修2遗传与进化知识点填空(每天打卡)
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
评论
0/150
提交评论