C语言面向对象程序设计.ppt

上传人:小飞机 文档编号:5426576 上传时间:2023-07-05 格式:PPT 页数:41 大小:259.49KB
返回 下载 相关 举报
C语言面向对象程序设计.ppt_第1页
第1页 / 共41页
C语言面向对象程序设计.ppt_第2页
第2页 / 共41页
C语言面向对象程序设计.ppt_第3页
第3页 / 共41页
C语言面向对象程序设计.ppt_第4页
第4页 / 共41页
C语言面向对象程序设计.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《C语言面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言面向对象程序设计.ppt(41页珍藏版)》请在三一办公上搜索。

1、面向对象程序设计,C+程序设计语言主讲:陈泽琳,学时安排:上课学时:24 上机学时:16,参考资料:(美)H.M.Deitel等著,薛万鹏等译,“C+程序设计教程”郑莉等编著,“C+语言程序设计”钱能主编,“C+程序设计教程”刘路放编著,“Visual C+与面向对象程序设计教程”杜建成等编著,“C+简明教程”.,课程学习的目标:学习C+程序设计语言,掌握面向对象程序设计方法。,课程学习的要求:预习,通过例子了解概念,编程上机实践。,课程大纲:,1.类(Class)2.构造函数和析构函数(Constructor&Destructor)3.静态成员和友元(Static Member&Friend

2、s)4.继承与多态性(Inheritance&Polymorphism)5.运算符重载(Operator Overloading)6.I/O流与文件(I/O Stream&File)7.模板(Template)、异常处理8.MFC类库及程序框架9.面向对象程序设计(Object-oriented programming),C程序复习(函数、参数、指针、引用、执行过程与程序),讲课内容的一点说明:书的内容写的很细,讲课时先讲主要内容,通过例子理解,在此过程中主要学习编程序,最后再补充C+的细节规则。,课件中的约定:基础内容重点内容*难点内容*需要注意的内容#应多练习的内容#,1.类(class)

3、1.1 类的概念,面向对象程序设计,问题:(例1-1)编写一个时钟的程序,程序可以设置时、分、秒,可以判断设置的时间是否合理(时:0-23,分:0-59,秒:0-59),显示时间。,什么是类?,类是一种用户定义的数据类型,C语言程序(结构化程序设计方法):#include struct Time int hour;int minute;int second;struct Time standard_time;main()set_time(18,20,30);show_time();void set_time(int h,int m,int s)standard_time.hour=(h=0,C

4、+语言程序(面向对象程序设计)#include class Time private:int hour;int minute;int second;public:void set_time(int,int,int);void show_time();void Time:set_time(int h,int m,int s)hour=(h=0,Time standard_time;main()standard_time.set_time(18,20,30);standard_time.show_time();,看上去只是写法不同,实际上在面向对象程序设计中,class,set_time(),sh

5、ow_time()是一个整体,是可以独立于main()主函数,也可以看成是对象的描述(注意这里的对象与后面要讲的对象一词意思不同,以后会详细介绍),即面向对象。而结构化程序设计中,只能将问题划分为一个个函数模块,哪些函数模块可以描述一个子问题或一个对象,程序中无法表示。因此以上两个程序是有本质区别的,面向对象程序设计可以将描述完整的子问题提供给他人,同时还能保护自己的程序不被他人乱改,多个面向对象子程序还可以象搭积木一样组合成大的面向对象程序,程序设计可以象生产汽车标准零件一样形成大规模生产,而这些在结构化程序设计中都很难做到。,为什么用类:可以实现面向对象的程序设计 即代码可以重用并受到保护

6、,类是实现面向对象程序设计的基本工具下面我们一步步地介绍关于类的定义、用类进行面向对象程序设计的方法,class 类名 数据成员(data members);.成员函数(member functions);,类的定义:,class 类名 public:公有段成员;protected:保护段成员;private:私有段成员;;,面向对象程序设计,说明:1.类名的第一个字母一般大写;2.无论是数据成员,还是成员函数,都可用三个访问控制 关键字说明:public、protected、private;3.默认情况是private;4.说明为private的数据成员,其他对象不可访问的;5.类是一种类型

7、的定义,不分配存储空间;,再看一个例子:(例1-2)描述人的信息:姓名、出生日、籍贯等 其成员函数有:设置姓名、出生日、籍贯等;显示姓名、出生日、籍贯等如要增加人的其他信息,学历、党派等,可以在类中增加这些数据成员;还可以增加处理这些数据成员的成员函数,class Human public:Human();display();private:char name10;struct int year;int month;int date;birthday;char history20;,有成员函数和无成员函数;成员的隐蔽和成员的公开;,类与结构的区别:,如何定义类成员:数据成员;成员函数的声明声明

8、(或说明)定义,说明:1.所有类定义中声明的成员函数都要定义其成员函数的实现;2.在类中定义成员函数,默认为内联函数;(小函数,执行效率高);3.在类之外定义成员函数,函数名必须为 类名:成员函数名()4.非成员函数的全称为:函数名(不会引起出错时可省略:),1.2 类成员的定义,:称为作用域运算符,例1-3(在类的内部定义成员函数)#include class Time public:void set_time(int h,int m,int s)hour=(h=0,(在类的外部定义成员函数)#include class Time public:void set_time(int,int,i

9、nt);void show_time();protected:int hour;int minute;int second;void Time:set_time(int h,int m,int s)hour=(h=0,类成员的保护:(即对象成员的访问限制),类成员为public,则任何函数可以访问,提供给外部的接口;为protected,则自己类的成员函数 和派生类的成员函数可以访问;为private,则只能被自己类的成员函数访问。,注:访问包括赋值和引用,a.birthday.year=1998;cout a.name,成员访问说明符:public:、protected:、private:,

10、除了全局变量赋初值,C及C+的变量访问都是在函数中完成的,类的数据成员的访问也是在成员函数或一般函数中完成的(一般函数只能访问public数据),函数中访问数据(类的数据成员)函数调用函数,例1-4,class Test public:void putpuba(int);int puba;protected:void putproa(int);int proa;private:void putpria(int);int pria;,void Test:putpuba(int a)puba=a;proa=a;pria=a;cout in putpuba()endl;cout puba is pu

11、ba;cout proa is proa;cout pria is pria;endl;/类成员函数可以访问自己的保护成员和私有成员putproa(a+1);putpria(a+2);cout end of putpuba()endl;,void Test:putproa(int a)puba=a;proa=a;pria=a;cout in putproa()endl;cout puba is puba;cout proa is proa;cout pria is pria;endl;/访问自己的私有成员putpria(a+3);coutend of putproa()endl;,void T

12、est:putpria(int a)puba=a;proa=a;pria=a;cout in putpria()endl;cout puba is puba;cout proa is proa;cout pria is pria;endl;/访问自己的保护成员 putproa()中的putpria()与下一函数调用/只能执行一个,否则循环调用/putproa(a+1);coutend of putpria()endl;,void main()int a=1,b=2,c=3;Test obj;obj.puba=10;cout in main(),puba=obj.puba endl;/obj.p

13、roa=20;error:proa is protected member/obj.pria=30;error:pria is private memberobj.putpuba(a);/obj.putproa(b);error:putproa()is protected member/obj.putpria(c);error:putpria()is private membercout endendl;,类定义的public段是类的对外接口,可以被外部访问,而protected可以被派生类访问。若类需修改,只需修改类的内部程序和保护或私有数据,而类的对外接口不变,即公共成员函数的功能、名字、

14、参数不变,则不需改外部应用程序。,类成员保护的好处:,由此可以建立搭建应用程序的基础块,这些块是通用的和安全的,例子见书p250-251,问题:,类中定义的public数据成员与全局变量的区别?,不同之处:,若类的对象是全局的,则访问都是整个程序但类的public数据成员要通过对象访问,类中成员:每定义一个对象则生成一个该成员的变量全局变量只有一个,作用域:类中成员:由对象变量的作用域决定 全局变量:整个程序,什么是对象:对象是类类型的变量。,类成员,protected:,public:,private:,定义对象时,为每个数据成员分配空间,为每个成员函数建立入口地址(即函数指针、函数参数和函

15、数返回值),this,*,1.3 对象,通过对象访问类的成员,人、车、动物等是一些抽象的概念,每个抽象的概念有它的特征,这就好像是类。对象是抽象类的实例,即当变量存放一个值时,这个值就是一个特定的人或车或动物等,不再是抽象的概念了。,例1-5,/本文件名为 class1.h(关于多文件编译,见上机指导)class Humanpublic:void assignhuman(char*,char*,char*);/赋予对象属性void display();/显示某个人的信息int updatecorp(char*corperation);/修改某个人的工作单位protected:char name

16、40;/存放姓名的数组struct int year;int month;int date;birthday;/存放生日的结构型变量char corperation100;/存放工作单位的数组;,/本文件名为 class1.cpp#include#include#include/atoi()#include class1.hvoid Human:assignhuman(char*np,char*bp,char*cp)char temp5;strcpy(name,np);strncpy(temp,bp,4);temp4=0;birthday.year=atoi(temp);strncpy(tem

17、p,bp+5,2);temp2=0;birthday.month=atoi(temp);strncpy(temp,bp+8,2);temp2=0;birthday.date=atoi(temp);strcpy(corperation,cp);void Human:display()cout A person info:endl;coutname birthday.year/birthday.month/birthday.date corperationendl;int Human:updatecorp(char*cp)strcpy(corperation,cp);return 0;,/本文件名

18、为 main.cpp#include#include#include#include class1.hvoid main()Human zhang;Human classmates10;int i;char name20,birthday11,corp50;zhang.assignhuman(zhang ming,1972/10/12,SCUT);zhang.display();,(接下一页),name:birthday:corperation:,zhang,name:birthday:corperation:name:birthday:corperation:name:birthday:co

19、rperation:,classmanes0,classmanes1,classmanes9,i,name0-19,birthday0-10,corp0-49,对象存储空间分配示意图:,for(i=0;i namebirthdaycorp;cout name birthday corpendl;if(!strchr(birthday,/)/检查输入的生日中是否包含/cout Input error.endl;elseclassmatesi.assignhuman(name,birthday,corp);for(i=0;i2;i+)classmatesi.display();classmates

20、1.updatecorp(HP);classmates1.display();,(接上一页),说明:对象 zhang,调用成员函数赋值并显示;对象数组classmates10,调用成员函数赋值并显示,调用成员函数:,对象名.成员函数名();引用对象名.成员函数名();对象指针-成员函数名();,不同类的成员函数可同名,实际为不同的函数普通函数的调用与在C语言中的调用相同 见例子1-6中的readpeople()可替换为display(),例1-6/用引用调用成员函数#include#include#include#include class1.hvoid readhuman(Human,voi

21、d readpeople(Human/用引用调用成员函数,readpeople(Human&)可改名为display(Human&),例1-7/用对象指针调用成员函数#include#include#include#include class1.hvoid readpeople(Human*);/普通函数声明;参数为指向Human类的指针void main()Human zhang;Human classmates10;int i;zhang.assignhuman(zhang ming,1972/10/12,SCUT);zhang.display();for(i=0;i2;i+)readpe

22、ople(,void readpeople(Human*pp)/pp是指向classmatesi对象的指针char name20,birthday11,corp50;cout namebirthdaycorp;cout assignhuman(name,birthday,corp);/用指针调用成员函数,类的作用域:类成员的作用域位于类中,即类的任何成员可以访问该类的其他成员。,对象的作用域和存在性:对象作用域和存在性同变量,即:作用域 存在性 全局对象 整个程序可访问 从程序开始到结束 全局静态对象 所在文件可访问 从程序开始到结束 局部对象 所在函数可访问 从函数调用到结束 局部静态对象

23、所在函数可访问 从程序开始到结束,问题1:,问题2:,如何测得Human类的对象所占的存储空间大小,默认函数参数值是否可以在定义中指定void func(int x=0,int y=0),sizeof(Human)或 sizeof(zhang),即各数据成员大小之和,问题3:,*定义在前调用在后则可以,*定义在后时则要放在原形说明中,如何定义Human型对象的链表:,class Human char name20;struct birthday;Human*next;.;,实例1.,构造一个时钟类,成员数据:时、分、秒为私有其成员函数有:置时钟;显示时钟;用时种类编程序。,面向对象程序设计实例:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号