版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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+的演化inputou
2、tputFunctionfun1fun2fun3fun4fun5fun6fun7main 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+之父主页: :/ research.att /bs/ :/经典巨作:?The C+ Programming
3、Language?The 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语言
4、的扩展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+)
5、 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 / const2. C+对C语言的扩展4根本类型布尔型: bool flag = true ; flag = false;枚举型: enum WeekDay = Sun,Mon,Tue,Wed,Thu,Fri,Sat ; Wee
6、kDay 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(i
7、nt) * length); free(p1);int *p2 = new int length ;delete p2;/ 释放数组用法delete p2; / 释放单个元素new Vs malloc1、new 是c+中的操作符, malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数; 而malloc那么只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏Memory leak 2. C+对C语言的扩展C+程序中的函数函数的声明函数的定义函数参数传递和返回值 参数的按值/ 按地址/ 按引用传递函数的调
8、用 递归与迭代内联函数 默认参数 函数重载与函数模板例如程序 swap.cpp课堂练习 将swap2.c按要求改成能够正确运行的CPP程序 C+函数调用中的数据传递1。 参数的按值传递 数按值调用传递时,生成实际参数值副本并传给被调用 函数的形式参数。 副本(行参)的改变并不影响调用者的原始变量值 (实参). 函数内对形参的访问、修改,都在形参的标识对象进 函数返回时,形参对象被撤消,不影响实参的值 防止意外的副作用影响开发正确、可靠的软件系统。 值传送的实参可以是常量、有确定值的变量或表达式 函数返回值通过匿名对象传递/ 例 交换对象的值# include void swap ( int ,
9、 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 ;3a8b x y3x8y83 通过地址传递实参数据形参指针对应的实际参数是地址表达式,即对象的指针;实际参数把对象的地址值赋给形式参数名标识的指针变量;被调用函数通过形参指针间接访问实参所指对象; 2。 参数
10、的按地址传递/ 例 交换对象的值# 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 ;3a8bxy3a8b&ax&by *x *y/ 例 交换对象的值# include v
11、oid 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 ;8a3b3. 按引用传递参数对一个数据可以使用“引用(reference)的方式声明, 引用的作用是为一个变量起一个别名 这是C+对C的一个
12、重要扩充,引用是一种新的变量类型。 一般形式: Type & varible2 = varible1 ;Eg int a ; int &b = a; / 声明b是int a的引用 b = 20; / a = 20 声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值。 b和a占内存中的同一个存储单元,它们具有同一地址。20ab使用引用的常见错误在一条语句中声明多个引用时应逐一声明 int& x=a, y = b,z = c ; /error int &x=a, &y=b, &z=c; 声明引用变量必须进行初始化,引用未定义变量称悬挂引用。 int x , &y, *p ; / Erroz
13、: y must be initialized 将前面声明的引用重新变为另一变量的别名是个逻辑错误. int y =5, z = 3; int &x = z, &x = y;3. 按引用传递参数void main ( ) int number=20; . cout change_it(number); cout number; int change_it (int& value) value+10; return value;引用参数int&value=number直接引用number返回value值的副本给调用函数3。参数的按引用传递形参为实参的引用形式,扩充函数传递数据的功能引用参数即函数
14、的参数是按引用传递, 引用参数为调用函数中实参的别名。引用参数形式 在函数原型中该参数类型后面加上&,fuc( int &count) 在函数调用中,只指定变量名,该变量通过引用传递。被调用函数可直接修改原始变量实参 在被调用函数体中,通过参数名指定的变量实际上就是 引用调用函数中的原始变量。3. 按引用传递参数引用传递的特点消除了复制大量数据的开销,有利提高执行效率;在被调用函数中直接使用形参变量,提高可读性;平安性较差,被调用函数能直接访问和修改调用者的数据。 假设要传递较大的对象,用常量引用参数模拟按值调用 要指定引用常量,在参数声明的类型说明符前面加上const。int change_
15、it ( const int& value);3。参数的按引用传递7引用引用的目的是为了消除指针引用顾名思义就是引用这个变量引用必须初始化。引用总是指向在初始化时被指定的对象,以后不能改变。不存在指向空值的引用。所以在使用引用之前不需要测试它的合法性。int a;int &b=a;C+对C语言的扩展C+特性:引用 内联函数inline C+为降低小程序调用开销的一种机制。默认参数值 default parameter value 函数参数的默认值使得在函数调用时可不指定参数。重载函数 overloaded function 函数重载是以同一个名字命名多个函数实现版本 。8函数重载C+语言可实现
16、函数重载,即多个函数在同一作用域可以用相同的函数名,编译器在编译时可以根据实参的类型来选择应该调用的函数。在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, flo
17、at 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)。 函数可以有多个缺省参数,但应注意只能从右往左缺省,例如: i
18、nt 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 将复杂过程简单的按功能分层,从而解决问题。 过程化编程是面向操作的(
19、action-oriented)结构化: 描述任何实体的操作的序列只需三种根本控制结构模块化设计: 程序设计中各个过程体和组成局部用模块表示过程化设计方法: 自顶向下,逐步细化函数对象 = 算法 数据结构程序 = (对象+对象+对象+) + 消息 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和开发环境发送消息面向对象程序设计类 class类封装了一组数据结构和作用于该数据结构的一组方法.面向对象语言必需提供的用户定义的数据类型 把具有相同属性的事物划分为一类,它将具有相同状态、操作和访问机制的多个对象抽象成为一个对象类。面向对象程序设计对象 object 构成世界的一个独立单位
20、,它具有自己的静态特征状态和动态特征操作。静态特征即可以用某种数据来描述的特征动态特征即对象所表现的行为或对象所具有的功能。类给出了属于该类的全部对象的抽象定义,对象那么是符合这种定义的一个实体。一个对象又称类的一个实例。Class & ObjectTeacher 姓名 性别 课程 教课; 研究; 说话; 属性数据行为方法实例化CppTeacher 姓名:Linda 性别: F 课程:CPP 教课; 研究; 说话; Class & Object抽象Student char name10 int age char sex int no float grade void study( ); int
21、 play(char*); .问题:输入圆的半径,求圆的周长和面积 数据描述:半径,周长,面积均用实型数表示数据处理:输入半径 r;计算周长 = 2*r ;计算面积 = pi * r2 ;输出周长,面积;结构化编程的方法 一个简单的C+程序 用面向对象方法编程 分析“圆是抽象的类类型建立具体的圆对象半径?圆的周长 ?圆的面积 ? 实例化问题:输入圆的半径,求圆的周长和面积 用面向对象方法编程,求圆的周长和面积 分析圆类 数据成员 半径 成员函数 置半径值 求圆的半径 求周长 求面积实例化面向对象 vs 面向过程设计 面向过程面向对象程序执行步骤通常按顺序执行在对象内执行独立其他对象数据项变量;
22、独立;位于程序中属性;属于一个对象;随对象而变,具有某种行为激活方式调用函数发消息给对象数据与函数保持分离结合成对象事件发生函数执行时方法执行时活动涉及函数和参数对象,消息和参数 1. 抽象(abstraction) 抽象的过程是将有关事物的共性归纳、 集中的过程。 抽象的作用是表示同一类事物的本质。 C+中的数据类型就是对一批具体的数 的抽象。 对象是具体存在的,可以将其抽象为一 种类型。 类是对象的抽象,而对象那么是 类的特例,或者说是类的具体表现形式。2. 封装(encapsulate)把全部属性和全部行为封装在一起,形成一个不可分割的独立单位即对象。 信息隐蔽(information
23、hiding) 对象的外部不能直接地存取对象属性,只能通过几个允许外部使用的效劳与对象发生联系。对象间通过发送消息进行交互.接受消息的对象发送消息的对象 发送消息效劳器 客户3. 继承 (inheritance)软件重用(software reusability) 采用继承的方法可以很方便地利用一个已有的类建立一个新的类。 类与类之间可以组成继承层次 一个类的定义派生类可以定义在另一个已定义类基类 的根底上。派生类可以继承基类中的属性和操作,也可以定义自己的属性和操作。4. 多态性(polymorphism) 由继承而产生的相关的不同的类,其对象 对同一消息会作出不同的响应。 对象的多态性是指在一般类中定义的属性 或操作被特殊类继承之后,可以具有不同 的数据类型或表现出不同的行为。这使得 同一个属性或操作名在一般类及其各个特 殊类中具有不同的语义。多态性增加程序的灵活性。 自学内容:根本输入输出方法常量const的定义与使用带默认参数的函数的声明与调用重载函数的定义与调用内联函数的使用程序设计题目上机实验课后作业 课后试验1. 实验目的 目的: 快速掌握C+语言编程的方法,在小范围内增强C+的功能, 标准编程,复习常用调式技巧 主要内容有:1输入流、输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时尚鞋类产品的设计与创新考核试卷
- 四川省内江市威远中学2024-2025学年高一上学期12月月考语文试题
- 第一单元混合运算(单元测试)-2024-2025学年三年级上册数学北师大版
- 《山西政策性农村保险研究》
- 建筑材料法规与标准考核试卷
- 木制容器供应链中的库存管理考核试卷
- DB5119T 18-2020 青峪猪 标准规范
- 刨花板行业国内外市场分析与拓展考核试卷
- 木材提取化学品技术考核试卷
- 《南海北部陆架外缘海底沙波分布规律及活动机理研究》
- 电力机车学员定职副司机练习题题库(1536道)
- 电气自动化专业职业生涯目标规划书范例及步骤
- 水利工程特点、重点、难点及应对措施
- 物业经理转正述职
- 中南林业科技大学《高等代数》2023-2024学年第一学期期末试卷
- 北师大版(2024新版)生物七年级上册期末考点复习提纲
- 课件 军人职责
- Unit 5 Fun ClubsSectionA1a-1d说课稿2024-2025学年人教版英语七年级上册
- 2025蛇年元旦晚会
- 电工的职业健康培训
- 2024年中国船舶涂料市场调查研究报告
评论
0/150
提交评论