面向对象程序设计Charpter3.ppt_第1页
面向对象程序设计Charpter3.ppt_第2页
面向对象程序设计Charpter3.ppt_第3页
面向对象程序设计Charpter3.ppt_第4页
面向对象程序设计Charpter3.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计及C+,第三章 C+概述,计算机系,本章主要内容,C+源程序的构成 C+在非面向对象方面的特点,2.2.1 C+程序的一般格式 -简单C+程序示例,/Simple c+ program 1.cpp #include void main() cout “Hello, world! ”; ,执行结果 Hello, world!,/Simple c+ program sum.cpp P20例3.1,C C+ 1、文件的扩展名 2、注释 3、头文件 4、标准输出 5、标准输入,2.2.1 C+程序的一般格式 -简单C+程序认识,流对象,运算符,2.2.2 C+程序的结构特性,体现面向对象的思想; 构成: 示例程序:P20例3.1,主函数及有关子函数构成,2.2.3 C+程序编辑、编译和运行:,过程:同C语言 常用C+版本带有C和C+两种编辑器:,如:Turbo C+、Borland C+、Visual C+ 、 .NET,2.3 C+在非面向对象方面的特性,C+对C语言的扩充,非面向对象的新特性; 面向对象的新概念。,自第四章起,本章内容,2.3.1 注释行,两种方式: /* */(注释一段)或/(注释一行),2.3.2 新的I/O流,流的概念 预定义的流对象,数据由一个位置流向另一个位置, 可以从流中提取数据或插入符数据。,cin 标准输入流,用来处理标准输入即键盘输入 cout 标准输出流,用来处理标准输出即屏幕输出,1、可以沿用传统stdio中的I/O函数; 2、在使用标准流 cout/cin时,C+程序必须包含头文件 iostream.h; 3、cin和、cout和要配对使用;,说明: 格式:,1、输出:cout表达式表达式2,新的I/O流1:,、在输出语句中,可以串联多个插入符, 输出多个数据项。 、在插入运算符后面可以写任意复杂的表 达式,系统会自动计算出它们的值并传给插入符。 如:couta+bc;,格式:cout表达式表达式2 说明:,新的I/O流2:标准输出流,格式: cin表达式表达式2 说明:,、在输入语句中,可以串联多个提取符,流表达式常常是获取输入值的变量。如:cinabc; 、提取符可以从输入流中读取一个字符序列,即字符串(以空白符结束的字符序列)P22例2.3 3、输入数据时,必须注意所输入数据的类型应与接受该数据之变量的类型相匹配,新的I/O流3:标准输入流,C: scanf(“%d”, ,cin num; cout “Enter new num:”; cout “The new num is : ” num “n”;,C+:,新的I/O流4:实例说明:,新的I/O流5:,使用操纵符对输入输出格式进行控制,endl插入一个新行,作用等同于n,2.3.3 灵活的局部变量说明,随用随定义。 体现灵活性,有利于节省时间,规定: 与C的比较:,2.3.4 结构、联合和枚举名可直接作类型名,在定义变量时,不必在结构、联合、枚举前冠以struct、union或enum,集中定义,说明:,2.3.5 const修饰符,定义常量(有数据类型);,功能: 定义: 示例: 与C的比较,与#define命令作用相似,但消除其不安全性,因为#define无法准确地反映常量的数据类型。 P26例3.3,const 类型定义符 变量名=初值;,const int sumValue=10; /常量定义,说明: 举例:,const 与指针的结合,指向常量的指针 常指针,const char *pc=“asdf”;/指向常量的指针 pc3=a; /error,不能修改常量 pc=“ghik”; /right,可以指向另一个常量,说明: 举例:,char *const pc=“asdf”; /常指针 pc3=a; pc=“ghjk”; /error, pc是常指针,不能赋新值,将指针声明冠以const,使指向的对象为常量,将指针本身声明为常量,指向常量的常指针,const char *const cpc=“asdf”; cpc3=a; /error cpc=“ghik”; /error,指针本身不可改变,指向的对象也不可改变,说明: 举例:,2.3.6 内置函数,定义: 作用 引入原因:,在函数说明前加关键字 inline,成为内置函数。,将函数体代码插入到函数调用处,消除函数调用时系统开销,提高运行速度。,进栈、参数传递、调用、弹栈、返回,1、内置函数的定义必须出现在调用之前。 2、与C中宏定义的比较 3、内置函数体中不能有循环语句、条件语句、开关switch等控制流语句 4、限制:一般将较短的函数定义为内置函数,说明:,相同:作用与机理类似; 改进:消除#define的不安全因素,2.3.7 函数原型,要求: 目的: 格式: 说明:,必须为每个函数建立原型,便于编译程序进行检查,从而确定函数调 用的正确性,返回类型 函数名(参数表),P39,2.3.8 带默认参数的函数,要求: 示例程序:,int add(int X, int Y) return X+Y; void main() add(1,2); /正确,实参与形参个数与类型都匹配 add(1); /错误,实参与形参个数不匹配 add(1.1,2.2); /错误,实参与形参类型不匹配 ,大家回顾起来了吗?,回顾C语言对函数定义与调用的规则,实参与形参在个数与类型两方面都匹配,C+语言中的函数定义与调用的规则,int add(int X=3, int Y=4) return X+Y; void main() add(1,2); /正确, X=1, Y=2 add(1); /正确, X=1, Y=4 add(); /正确, X=3, Y=4 ,大家知道这是什么函数吗?,改进: 示例程序:,允许实参与形参在个数方面不相互匹配,但此时 该函数应定义为带缺省形参值的函数。,正确设置缺省形参值的方法:,在缺省形参值的右面不能有非缺省形参值定义。,int fun(int i, int j=5, int k=6); /正确 int fun(int i, int j=5, int k); /错误 (如fun(3,4)) int fun(int i=1, int j, int k=6); /错误 (如fun()),规定: 示例:,调用规则:,调用时如给出实参,则采用实参值,否则 采用预先定义出的默认形参值作为实参。,缺省形参值的摆放位置,先定义后使用。 即若调用在定义之前,缺省形参值在函数的原型说明中 给出;但若调用出现在定义之后,则在定义时给出。,int add(int X=5,int Y=6); void main(void) add(); /调用在前 int add(int X, int Y) return X+Y; ,int add(int X=5, int Y=6) return X+Y;/定义在前 void main(void) add(); ,规定: 示例:,int add(int X, int Y) return X+Y; float add(float X, float Y) return X+Y; ,注: “同一行为”不能使用同一名字标识,2.3.9 函数重载,回顾C语言:,要求: 示例程序:,在同一个程序内不能出现同名函数。,允许将功能相近的函数共用一个函数名,形成 同名不同形参定义的重载函数。,int Add(int X, nt Y); float Add(float X, float Y);,C+语言中的重载函数,改进: 优点: 示例程序:,命名统一,减少对函数名的记忆。 是实现C+中静态多态性的一种手段,即 “同一行为”使用同一名字来标识。,C+编译器区分原则:,根据不同的参数类型、参数个数、参数顺序自动选 择一个合适的函数。,对重载函数的要求,1、同名,但不同的形参定义(参数类型、参数个数、参数顺序),但不检查返回类型。 2、说明:P33(2)-(3),2.3.10 作用域限定符:,#include “iostream.h“ int X=1; void main() int X=2; cout X; ,输出的X值是“2” ? (同名覆盖原则)但如果要输出全局变量X的值,怎么办?),回顾C语言:,要求: 示例程序:,同一个程序中尽可能保持变量名的唯一性,最好不要同名。,访问在局部变量作用域中的同名全局变量。,#include “iostream.h“ int X=1; void main() int X=2; cout “local X=“ X; cout “global X=“ :X; ,C+语言中的全局作用域限定符::,功能: 示例程序:,2.3.11 无名联合,C+中一种特殊联合,即在union后没有给出联合名,说明:,举例:,union int i, float f;,注意:,可使用其中数据项名字直接存取 如上例i20;,2.3.12 强制类型转换,功能:,格式:,将一个表达式转换为所需类型,1、(类型名)(表达式) 2、类型名(表达式),说明:,C支持第一种格式; C+支持两种格式,推荐第2种,举例:,int i=10; float x=(float)i;/或者float x=float(i);,2.3.13 C+中的new和delete,功能: 使用形式: 示例程序:P58例3.24,进行内存的分配和释放;,pnew type;,在内存中(数据堆中)分配一个sizeof(type) 的内存单元,并返回该内存单元的地址,比较C语言的malloc()和free()函数,功能: 优点:,类似;,1、new自动计算要分配内存的类型大小; 2、new自动返回正确的指针类型; 3、new可以将分配的对象初使化; 4、new与delete都可以被重载。,使用说明,为数组动态分配内存空间,char *ptr; ptr=new int10;,new可以为简单变量分配空间的同时,进行初使化; 释放动态分配的数组存储区,使用如下格式: new分配内存失败,返回空指针NULLP58例3.24 ; New分配的空间只能用delete释放。,ptr=new int(10);,delete p;,注:区别如下两种不同的用法,int *ptr=new int (5); int *ptr=new int 5;,大家知道其中的“5”各代表什么含义吗?,定义分配一个int 的内存单元并且赋初始值 为5,然后返回该内存单元的地址到ptr中。,定义分配一个int 的数组,总计为5个元素, ptr指向该数组的起始地址。,2.3.14 引用,在不同的作用域内访问同一内存单元。,概念: 作用: 格式: 示例程序:,变量的别名,数据类型 &引用名已定义的变量名;,P59例3.25,说明(P59-63),在声明引用时必须对其初始化(1); 对比C中指针(2): 引用不能重新赋值(3); 有些类型的数据无法建立引用(4-5): 关于&运算符(6).,指针:通过地址间接访问变量; 引用:通过别名直接访问变量。,void main() int X=1; fun(X); void fun(int ,引用作函数参数,示例程序: 说明:,函数的形参为引用,则说明时不必要加以初始化,此时形参为实参的引用。,错误:void fun(int &a=1),#include void swap(int *m, int *n) int temp; temp=*m; *m=*n; *n=temp; void main() int a=5, b=10; swap( ,大家知道两者的差别吗?,#include void swap(int ,与C语言中指针作函数参数的比较:,引用作函数参数的优点,提高调用速度,因为只需要传送地址而不需要直接 将大量数据拷贝,因而特别适用于形参为大量数据 的应用场合。,struct Data int a1000; AData; void fun(struct Data X) ,struct Data int

温馨提示

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

评论

0/150

提交评论