C语言面向对象程序设计1ppt课件_第1页
C语言面向对象程序设计1ppt课件_第2页
C语言面向对象程序设计1ppt课件_第3页
C语言面向对象程序设计1ppt课件_第4页
C语言面向对象程序设计1ppt课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

.,1,面向对象程序设计,C+程序设计语言主讲:陈泽琳,学时安排:上课学时:24上机学时:16,参考资料:(美)H.M.Deitel等著,薛万鹏等译,“C+程序设计教程”郑莉等编著,“C+语言程序设计”钱能主编,“C+程序设计教程”刘路放编著,“VisualC+与面向对象程序设计教程”杜建成等编著,“C+简明教程”.,课程学习的目标:学习C+程序设计语言,掌握面向对象程序设计方法。,课程学习的要求:预习,通过例子了解概念,编程上机实践。,课程大纲:,1.类(Class)2.构造函数和析构函数(Constructormain()set_time(18,20,30);show_time();voidset_time(inth,intm,ints)standard_time.hour=(h=0,C+语言程序(面向对象程序设计)#includeclassTimeprivate:inthour;intminute;intsecond;public:voidset_time(int,int,int);voidshow_time();voidTime:set_time(inth,intm,ints)hour=(h=0,Timestandard_time;main()standard_time.set_time(18,20,30);standard_time.show_time();,看上去只是写法不同,实际上在面向对象程序设计中,class,set_time(),show_time()是一个整体,是可以独立于main()主函数,也可以看成是对象的描述(注意这里的对象与后面要讲的对象一词意思不同,以后会详细介绍),即面向对象。而结构化程序设计中,只能将问题划分为一个个函数模块,哪些函数模块可以描述一个子问题或一个对象,程序中无法表示。因此以上两个程序是有本质区别的,面向对象程序设计可以将描述完整的子问题提供给他人,同时还能保护自己的程序不被他人乱改,多个面向对象子程序还可以象搭积木一样组合成大的面向对象程序,程序设计可以象生产汽车标准零件一样形成大规模生产,而这些在结构化程序设计中都很难做到。,为什么用类:可以实现面向对象的程序设计即代码可以重用并受到保护,类是实现面向对象程序设计的基本工具下面我们一步步地介绍关于类的定义、用类进行面向对象程序设计的方法,class类名数据成员(datamembers);.成员函数(memberfunctions);,类的定义:,class类名public:公有段成员;protected:保护段成员;private:私有段成员;;,面向对象程序设计,说明:1.类名的第一个字母一般大写;2.无论是数据成员,还是成员函数,都可用三个访问控制关键字说明:public、protected、private;3.默认情况是private;4.说明为private的数据成员,其他对象不可访问的;5.类是一种类型的定义,不分配存储空间;,再看一个例子:(例1-2)描述人的信息:姓名、出生日、籍贯等其成员函数有:设置姓名、出生日、籍贯等;显示姓名、出生日、籍贯等如要增加人的其他信息,学历、党派等,可以在类中增加这些数据成员;还可以增加处理这些数据成员的成员函数,classHumanpublic:Human();display();private:charname10;structintyear;intmonth;intdate;birthday;charhistory20;,有成员函数和无成员函数;成员的隐蔽和成员的公开;,类与结构的区别:,如何定义类成员:数据成员;成员函数的声明声明(或说明)定义,说明:1.所有类定义中声明的成员函数都要定义其成员函数的实现;2.在类中定义成员函数,默认为内联函数;(小函数,执行效率高);3.在类之外定义成员函数,函数名必须为类名:成员函数名()4.非成员函数的全称为:函数名(不会引起出错时可省略:),1.2类成员的定义,:称为作用域运算符,例1-3(在类的内部定义成员函数)#includeclassTimepublic:voidset_time(inth,intm,ints)hour=(h=0,(在类的外部定义成员函数)#includeclassTimepublic:voidset_time(int,int,int);voidshow_time();protected:inthour;intminute;intsecond;voidTime:set_time(inth,intm,ints)hour=(h=0,类成员的保护:(即对象成员的访问限制),类成员为public,则任何函数可以访问,提供给外部的接口;为protected,则自己类的成员函数和派生类的成员函数可以访问;为private,则只能被自己类的成员函数访问。,注:访问包括赋值和引用,a.birthday.year=1998;,成员访问说明符:public:、protected:、private:,除了全局变量赋初值,C及C+的变量访问都是在函数中完成的,类的数据成员的访问也是在成员函数或一般函数中完成的(一般函数只能访问public数据),函数中访问数据(类的数据成员)函数调用函数,例1-4,classTestpublic:voidputpuba(int);intpuba;protected:voidputproa(int);intproa;private:voidputpria(int);intpria;,voidTest:putpuba(inta)puba=a;proa=a;pria=a;coutinputpuba()endl;coutpubaispuba;coutproaisproa;coutpriaispria;endl;/类成员函数可以访问自己的保护成员和私有成员putproa(a+1);putpria(a+2);coutendofputpuba()endl;,voidTest:putproa(inta)puba=a;proa=a;pria=a;coutinputproa()endl;coutpubaispuba;coutproaisproa;coutpriaispria;endl;/访问自己的私有成员putpria(a+3);coutendofputproa()endl;,voidTest:putpria(inta)puba=a;proa=a;pria=a;coutinputpria()endl;coutpubaispuba;coutproaisproa;coutpriaispria;endl;/访问自己的保护成员putproa()中的putpria()与下一函数调用/只能执行一个,否则循环调用/putproa(a+1);coutendofputpria()endl;,voidmain()inta=1,b=2,c=3;Testobj;obj.puba=10;coutinmain(),puba=obj.pubaendl;/a=20;error:proaisprotectedmember/obj.pria=30;error:priaisprivatememberobj.putpuba(a);/obj.putproa(b);error:putproa()isprotectedmember/obj.putpria(c);error:putpria()isprivatemembercoutendendl;,类定义的public段是类的对外接口,可以被外部访问,而protected可以被派生类访问。若类需修改,只需修改类的内部程序和保护或私有数据,而类的对外接口不变,即公共成员函数的功能、名字、参数不变,则不需改外部应用程序。,类成员保护的好处:,由此可以建立搭建应用程序的基础块,这些块是通用的和安全的,例子见书p250-251,问题:,类中定义的public数据成员与全局变量的区别?,不同之处:,若类的对象是全局的,则访问都是整个程序但类的public数据成员要通过对象访问,类中成员:每定义一个对象则生成一个该成员的变量全局变量只有一个,作用域:类中成员:由对象变量的作用域决定全局变量:整个程序,什么是对象:对象是类类型的变量。,类成员,protected:,public:,private:,定义对象时,为每个数据成员分配空间,为每个成员函数建立入口地址(即函数指针、函数参数和函数返回值),this,*,1.3对象,通过对象访问类的成员,人、车、动物等是一些抽象的概念,每个抽象的概念有它的特征,这就好像是类。对象是抽象类的实例,即当变量存放一个值时,这个值就是一个特定的人或车或动物等,不再是抽象的概念了。,例1-5,/本文件名为class1.h(关于多文件编译,见上机指导)classHumanpublic:voidassignhuman(char*,char*,char*);/赋予对象属性voiddisplay();/显示某个人的信息intupdatecorp(char*corperation);/修改某个人的工作单位protected:charname40;/存放姓名的数组structintyear;intmonth;intdate;birthday;/存放生日的结构型变量charcorperation100;/存放工作单位的数组;,/本文件名为class1.cpp#include#include#include/atoi()#includeclass1.hvoidHuman:assignhuman(char*np,char*bp,char*cp)chartemp5;strcpy(name,np);strncpy(temp,bp,4);temp4=0;birthday.year=atoi(temp);strncpy(temp,bp+5,2);temp2=0;birthday.month=atoi(temp);strncpy(temp,bp+8,2);temp2=0;birthday.date=atoi(temp);strcpy(corperation,cp);voidHuman:display()coutApersoninfo:endl;coutnamebirthday.year/birthday.month/birthday.datecorperationbirthdaycorp;coutnamebirthdaycorpendl;if(!strchr(birthday,/)/检查输入的生日中是否包含/coutInputerror.birthdaycorp;coutassignhuman(name,birthday,corp);/用指针调用成员函数,类的作用域:类成员的作用域位于类中,即类的任何成员可以访问该类的其他成员。,对象的作用域和存在性:对象作用域和存在性同变量,即:作用域存在性全局对象整个程序可访问从程序开始到结束全局静态对象所在文件可访问从程序开始到结束局部对象所在函数可访问从函数调用到结束局部静态对象所在函数可访问从程序开始到结束,问题1:,问题2:,如何测得Human类的对象所占的存储空间大小

温馨提示

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

最新文档

评论

0/150

提交评论