CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件

上传人:E**** 文档编号:91275549 上传时间:2019-06-27 格式:PPT 页数:64 大小:196KB
返回 下载 相关 举报
CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件_第1页
第1页 / 共64页
CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件_第2页
第2页 / 共64页
CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件_第3页
第3页 / 共64页
CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件_第4页
第4页 / 共64页
CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件》由会员分享,可在线阅读,更多相关《CC程序设计第2版教学课件作者陈卫卫C第6章节课件1课件(64页珍藏版)》请在金锄头文库上搜索。

1、C/C+程序设计技术 (第二版),制作者:陈卫卫 王庆瑞,第6章 类和对象,主要内容 6.1 基本用法 6.2 重载、组合和继承 6.3 虚拟和友元 6.4 模板,6.1 基本用法,6.1.1 定义方式,类(class)和对象(object)是C+实现面向对象的程序设计基本工具,类是自定义类型,类型为类的变量称为对象 类中含有成员数据和成员函数 可以设置操作权限限制只有成员函数才能访问成员数据,有效地保护和隐藏数据,类的一般定义格式: class 类名 成员序列 ; /类体部分,类的定义格式,成员序列中列出类的所有成员 成员说明的一般格式: 操作权限:成员定义; 操作权限:private(私有

2、的)、public(公有的) protected(保护的,可继承的) private是默认的(可省略),操作权限含义,指明该成员是否可在类外引用,是否可被子类继承 引用:对成员数据的存取,对成员函数的调用,操作权限基本用法,1)只在类内部使用的数据 操作权限指定为private和protected 可以避免被意外修改,有效地保护数据,2)带有家族共性的成员(数据和函数) 操作权限指定为protected以便让子类继承 在子类中自动产生同名成员,使子类更像父类,3)具有公用性作用的成员数据(比如公用常数) 操作权限指定为public,以便共享 具有入口作用的函数,操作权限指定为public 以便

3、外部对类进行操作,类的典型定义格式,class 类名 private: /不可继承的私有部分 成员数据; 成员函数; protected: /可继承的私有部分 成员数据; 成员函数; public: /公有部分 成员数据; 成员函数; ,成员数据和成员函数的定义方式 与普通数据和函数的定义方式相同,成员函数的定义方式,1)直接写在类定义体中(与普通函数定义相同),2)类定义体内写函数声明(与普通函数说明相同) 函数定义写在 在函数名前加类名和作用域运算符:(双冒号) 写在类定义体之外成员函数定义一般格式: 函数类型 类名:函数名(形参表),例6-1 类定义示例,class sample /类名

4、sample int i; /私有数据i public: void initial( ) /公有成员函数initial i=100; /initial的函数体 void display( ) /公有成员函数display cout iendl; /display的函数体 ;,定义对象的一般格式:类名 对象名序列; 例如: sample obj1, obj2; /定义sample类的两个对象obj1和obj2,例6-1 类定义示例,对于同一类的多个对象: 成员数据分别占有各自的存储空间 成员函数共用同一副本 可以理解成: 成员数据是分配给对象的,成员函数是分配给类的,可以在定义类的同时定义对象(

5、合并定义),例如: class sample 类体部分同前页 obj1,obj2;/定义类的同时,定义两个对象obj1和obj2,6.1.2 引用方式,与对结构变量的引用方式大体相同,1)用成员运算符“.”引用对象中的公有成员 一般格式: 对象名.数据名 对象名.函数名(实参表) 例如: obj2.display( );,6.1.2 引用方式,与对结构变量的引用方式大体相同,2)定义指向对象的指针,通过指针引用对象的成员 例如: sample obj, *p=,6.1.2 引用方式,与对结构变量的引用方式大体相同,3)定义指向类的指针类型,再定义指向类的指针 例如: typedef sampl

6、e *sptr; /定义指向sample类的指针类型sptr sample stack; /定义对象stack sptr p= /定义指向对象stack的指针p,4)类作为函数的参数(后面有例子),例6-2 类的用法示例 统计一串字符中的数字和字母各多少个,#include #include #include /setw所在的头文件 #include const int M=1000; class string /定义类string int n; /类string的私有部分 char bM; public: /类string的公有部分 int digitals, letters; /公有成员数

7、据digitals和letters void initial( ) /公有成员函数(初始化)的定义 digitals=letters=n=0; ,例6-2 类的用法示例,void getstring( ); /公有成员函数getstring的声明 void sortchar( ); /公有成员函数sortchar的声明 void display( ); /公有成员函数display的声明 ; /类string的定义结束点 /以下是类string成员函数的定义 void string:getstring( ) /定义成员函数getstring char ch; cout“请输入字符串,按回车键结

8、束“endl; for(;) ch=getchar( ); if(ch=n)break; bn+=ch; ,例6-2 类的用法示例,void string:sortchar( ) /定义成员函数sortchar int i; for(i=0;in;i+) if(isdigit(bi)digitals+; else if(isalpha(bi)letters+; void string:display( ) /定义成员函数display int i; for(i=0;in;i+)coutsetw(2)bi; coutendl; cout“读入的字符总数=“nendl; cout“其中,数字个数=

9、“digitalsendl; cout“ 字母个数=“lettersendl; ,例6-2 类的用法示例,void main( ) /主函数 string a; /定义对象a a.initial( ); /初始化对象a中的数据 a.getstring( ); /输入字符串 a.sortchar( ); /处理字符串 a.display( ); /输出计算结果 ,6.1.3 构造函数和析构函数,1构造函数(constructor function),构造函数是特殊的成员函数,其特殊性在于: 1)函数名必须与类同名 2)执行定义对象的语句时自动调用构造函数 3)操作权限为必须为public 4)不

10、带返回类型(没有返回值) 5)不能为用户程序调用(不能出现调用构造函数的语句),通常用来预置对象中成员数据的初值(简化程序结构) 构造函数可以带参数(定义对象时给出实参),6.1.3 构造函数和析构函数,2析构函数(destructor function),析构函数的特殊性与构造函数相似(前两点有点不同) 1)函数名必须与类同名,但在类名的前面加符号“” 2)在对象的作用域结束时,系统自动调用析构函数 再撤消对象,回收动态数据所占的存储单元,通常将对对象最后处理操作设计成析构函数,例6-3 将上例的类改为带构造函数和析构函数,class string int n; char bM; publi

11、c: int digitals; int letters; string( ) /构造函数(功能与上例的initial函数相同) digitals=letters=n=0; string( ); /析构函数的声明 void getstring( ); void sortchar( ); void display( ); ; string:string( ) /析构函数的定义 cout“本次操作结束,本次定义的对象被撤消!“endl; /其他部分同上例,6.1.4 程序设计示例,用类实现栈结构及栈操作,栈是一种常用数据结构 将元素存到栈中称进栈,将元素从栈中取出称退栈 元素进退栈遵循后进先出原则

12、 退栈的总是最近进栈的元素 通常用数组(或动态数组)作为栈元素的存储空间 栈顶指针指向最后进栈的元素(栈顶元素) 每当元素进栈或退栈时都要及时修改栈顶指针,6.1.4 程序设计示例,用类实现栈结构及栈操作,元素进栈时,先查看栈空间是否用完(栈是否已满) 如果没占满,元素顺利进栈 若栈已满,则本次进栈操作失败(元素暂时不能进栈) 进行栈上溢处理(追加栈空间) 退栈时,先查看栈中是否还存有元素(栈是否为空) 若栈不空,则执行退栈操作 若栈空,本次退栈失败,进行栈下溢处理 将栈已空的信息通知退栈请求者,以便作出相应处理,6.1.4 程序设计示例,用类实现栈结构及栈操作,设计栈类时 私有数据:栈空间(

13、动态数组)和栈顶指针 公有函数:进退函数、退栈函数 构造函数:分配栈空间 析构函数:撤消栈空间,例6-4 栈类结构示例(用动态数组存储栈),#include #include #define ERROR -1 /操作不成功 #define OK 1 /操作成功 #define MAX 1024 /预分配栈空间的大小 class CStack int s_length; /栈长度 int *s_buffer; /栈空间 int s_top; /栈顶指针 public:,例6-4 栈类结构示例(用动态数组存储栈),CStack( ); /构造函数声明 CStack( ) /析构函数定义 delet

14、e s_buffer; /回收栈空间 int push(int x); /进栈函数声明 int pop( ); /退栈函数声明 void sdisplay( ); /栈显示函数声明 ; /以下是栈成员函数定义部分 CStack:CStack( ) /构造函数定义 s_length=MAX; /栈空间大小 s_buffer=new int s_length; /产生栈空间 s_top=0; /栈顶指针初值(栈空标记) ,例6-4 栈类结构示例(用动态数组存储栈),int CStack:push(int x) /进栈函数定义 if(s_top=s_length)return ERROR; /返回栈

15、满信息 s_buffers_top+=x; /元素x安全进栈 return OK; /返回进栈满成功信息 ,例6-4 栈类结构示例(用动态数组存储栈),int CStack:pop( ) /退栈函数定义 if(s_top=0)return ERROR; /返回栈空信息 return s_buffer-s_top; /返回退栈元素 ,例6-4 栈类结构示例(用动态数组存储栈),void CStack:sdisplay( ) /显示栈内容函数定义 int i; if(s_top=0) /栈当前为空 cout“当前栈中没有元素。“endl; return; /输出当前栈中元素 for(i=0;is_top;)coutsetw(4)s_bufferi+; coutendl; ;,例6-4 栈类结构示例(用动态数组存储栈),/以下是类以外的函数定义 void spush(CStack ,例6-4 栈类结构示例(用动态数组存储栈),void spop(CStack ,例6-4 栈类结构示例(用动态数组存储栈),void opstack(CStack ,例6-4 栈类结构示例(用动态数组存储栈),void main( ) CStack st

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号