欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【教学课件】第4章类和对象(二).ppt

    • 资源ID:69866499       资源大小:377.97KB        全文页数:44页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第4章类和对象(二).ppt

    第第4章章类和对象(二)类和对象(二)4.1自引用指针自引用指针this例例4.1this指针的引例。指针的引例。#includeclassApublic:A(intx1)x=x1;voiddisp()coutx=xendl;private:intx;main()Aa(1),b(2);couta:;a.disp();coutb:;b.disp();return0;例例4.2 显示显示this指针的值。指针的值。#includeclass Apublic:A(int x1)x=x1;void disp()coutnthis=thiswhen x=x;private:int x;main()A a(1),b(2),c(3);a.disp();b.disp();c.disp();return 0;4.2 对象数组与对象指针对象数组与对象指针 4.2.1对象数组对象数组所谓对象数组是指每一数组元素都是对象的数组,。定义一个一维数组的格式如下:类名数组名下标表达式;例例4.4 对象数组的应用。对象数组的应用。#includeclass exampublic:void set_x(int n)x=n;int get_x()return x;private:int x;main()exam ob4;int i;for(i=0;i4;i+)obi.set_x(i);for(i=0;i4;i+)coutobi.get_x();cout”操作符。例例4.7对象指针的使用。对象指针的使用。#includeclass exepublic:void set_a(int a)x=a;void show_a()coutxshow_a();/利用对象指针访问对象的成员 return 0;2.用对象指针访问对象数组用对象指针访问对象数组 例如将例4.7的main()改写为:main()exeob2,*p;ob0.set_a(10);ob1.set_a(20);p=ob;p-show_a();p+;p-show_a();return0;4.3 向函数传递对象向函数传递对象 4.3.1使用对象作为函数参数使用对象作为函数参数 例例4.11 使用对象作为函数参数。使用对象作为函数参数。#includeclass aClass public:aClass(int n)i=n;void set(int n)i=n;int get()return i;private:int i;void sqr(aClass ob)ob.set(ob.get()*ob.get();coutcopy of obj has i value of;coutob.get()n;main()aClass obj(10);sqr(obj);coutBut,obj.i is unchanged in main:;coutobj.get();return 0;4.3.2使用对象指针作为函数参数使用对象指针作为函数参数例例4.12 使用对象指针作为函数参数。使用对象指针作为函数参数。#includeclass aClass public:aClass(int n)i=n;void set(int n)i=n;int get()return i;private:int i;void sqr(aClass *ob)ob-set(ob-get()*ob-get();coutCopy of obj has i value of;coutget()n;main()aClass obj(10);sqr(&obj);coutNow,obj.i in main()has been changed:;coutobj.get()n;return 0;4.3.3使用对象引用作为函数参数使用对象引用作为函数参数例例4.13 使用对象引用作为函数参数。使用对象引用作为函数参数。#includeclass aClass public:aClass(int n)i=n;void set(int n)i=n;int get()return i;private:int i;void sqr(aClass&ob)ob.set(ob.get()*ob.get();coutCopy of obj has i value of;coutob.get()n;main()aClass obj(10);sqr(obj);coutNow,obj.i in main()has been changed:;coutobj.get()n;return 0;4.4 静态成员静态成员 4.4.1静态数据成员静态数据成员在一个类中,若将一个数据成员说明为static,这种成员称为静态数据成员。与一般的数据成员不同,无论建立多少个类的对象,都只有一个静态数据的拷贝。从而实现了同一个类的不同对象之间的数据共享。定义静态数据成员的格式如下:static 数据类型 数据成员名;例例4.15静态数据成员的使用引例。静态数据成员的使用引例。#include#includeclass Student public:Student(char*name1,char*stu_no1,float score1);Student();void show();/输出姓名、学号和成绩 void show_count_sum_ave();/输出学生人数、总成绩和平均成绩 private:char*name;/学生姓名 char*stu_no;/学生学号 float score;/学生成绩 static int count;/静态数据成员,统计学生人数 static float sum;/静态数据成员,统计总成绩 static float ave;/静态数据成员,统计平均成绩;Student:Student(char*name1,char*stu_no1,float score1)name=new charstrlen(name1)+1;strcpy(name,name1);stu_no=new charstrlen(stu_no1)+1;strcpy(stu_no,stu_no1);score=score1;+count;/累加学生人数 sum=sum+score;/累加总成绩 ave=sum/count;/计算平均成绩 Student:Student()delete name;delete stu_no;-count;sum=sum-score;void Student:show()coutn name:name;coutn stu_no:stu_no;coutn score:score;void Student:show_count_sum_ave()coutn count:count;/输出静态数据成员count coutn sum:sum;/输出静态数据成员sum coutn ave:静态成员函数名(实参表)例4.18静态成员函数来访问静态数据成员。#include#includeclass Student private:char*name;/学生姓名 char*stu_no;/学生学号 float score;/学生成绩 static int count;/静态数据成员,统计学生人数 static float sum;/静态数据成员,统计总成绩 public:Student(char*name1,char*stu_no1,float score1);Student();void show();/普通成员函数,输出姓名、学号和成绩staticvoid show_count_sum();/静态成员函数,输出学生人数和总成绩;Student:Student(char*name1,char*stu_no1,float score1)name=new charstrlen(name1)+1;strcpy(name,name1);stu_no=new charstrlen(stu_no1)+1;strcpy(stu_no,stu_no1);score=score1;+count;/累加学生人数 sum=sum+score;/累加总成绩 Student:Student()delete name;delete stu_no;-count;sum=sum-score;void Student:show()coutn name:name;coutn stu_no:stu_no;coutn score:score;void Student:show_count_sum()/静态成员函数 coutn count:count;/输出静态数据成员 coutn sum:sum;/输出静态数据成员int Student:count=0;/静态数据成员初始化float Student:sum=0.0;/静态数据成员初始化void main()Student stu1(Liming,990201,90);stu1.show();Student:show_count_sum();/使用类名访问 静态成员函数 Student stu2(Zhanghao,990202,85);stu2.show();stu2.show_count_sum();/使用对象stu2访问 静态成员函数 4.4.3 通过普通指针访问静态成员通过普通指针访问静态成员 例例4.20 通过指针访问类的静态数据成员。通过指针访问类的静态数据成员。#includeclass myclass public:myclass()/构造函数,每定义一个对象,静态数据成员i加1 +i;static int i;/声明静态数据成员i;int myclass:i=0;/静态数据成员i初始化,不必在前面加staticmain()int*count=&myclass:i;/声明一个int型指针,指向类的静态成员 myclass ob1,ob2,ob3,ob4;cout“myclass:i=”*countendl;/通过指针直接 访问静态数据成员 return 0;4.5 4.5 友友 元元 友元既可以是不属于任何类的一般函数,也可以是另一个类的成员函数,还可以是整个的类。4.5.1 4.5.1 友元函数友元函数 友元函数不是当前类的成员函数友元函数不是当前类的成员函数,而是而是独立于当前类的外部函数独立于当前类的外部函数,但它可以访问该但它可以访问该类的所有对象的成员类的所有对象的成员,包括私有成员、保护包括私有成员、保护成员和公有成员。成员和公有成员。例例4.22 友元函数的使用。友元函数的使用。#include#includeclass girl public:girl(char*n,int d)name=new charstrlen(n)+1;strcpy(name,n);age=d;friend void disp(girl&);/声明友元函数 girl()delete name;private:char*name;int age;void disp(girl&x)/定义友元函数 coutGirls name is x.name,age:x.agen;void main()girl e(Chen Xingwei,18);disp(e);/调用友元函数 4.5.2 4.5.2 友元成员友元成员 一个类的成员函数也可以作为另一一个类的成员函数也可以作为另一个类的友元个类的友元,这种成员函数不仅可以访问这种成员函数不仅可以访问自己所在类对象中的所有成员自己所在类对象中的所有成员,还可以访还可以访问问friend声明语句所在类对象中的所有成声明语句所在类对象中的所有成员。员。这样能使两个类相互合作、协调工作这样能使两个类相互合作、协调工作,完成某一任务。完成某一任务。例例4.24 一个类的成员函数作为另一个类的友元。一个类的成员函数作为另一个类的友元。#include#includeclass girl;class boy public:boy(char*n,int d)name=new charstrlen(n)+1;strcpy(name,n);age=d;void disp(girl&);/声明disp()为类boy的成员函数 boy()delete name;private:char*name;int age;class girl public:girl(char*n,int d)name=new charstrlen(n)+1;strcpy(name,n);age=d;friend void boy:disp(girl&);/声明类boy的成员函数disp()/为类girl的友元函数 girl()delete name;private:char*name;int age;void boy:disp(girl&x)/定义友元函数disp()coutBoys name is name,age:agen;/访问boy类对象的成员 coutGirls name is x.name,age:x.agen;/访问girl类对象的成员 void main()boy b(Chen Hao,25);girl e(Zhang Wei,18);b.disp(e);程序运行结果如下程序运行结果如下:Boys name is Chen Hao,age:25 Boys name is Chen Hao,age:25 Girls name is:Zhang Wei,age:18 Girls name is:Zhang Wei,age:18 4.5.3 4.5.3 友元类友元类 一个类也可以作为另一个类的友元。一个类也可以作为另一个类的友元。例如例如:class Y class Y /;class X class X /friend Y;/friend Y;/声明类声明类Y Y为类为类X X的友元类的友元类 /;4.6 4.6 对象成员对象成员 如如果果一一个个类类的的对对象象是是另另一一个个类类的的数数据据成成员员,则称这样的数据成员为对象成员。例如则称这样的数据成员为对象成员。例如:class A class A /./.;class B class B A a;/A a;/类类A A的对象的对象a a为类为类B B的对象成员的对象成员 public:public:/;使使用用对对象象成成员员着着重重要要注注意意的的问问题题是是对对象象成成员员的的初初始始化问题化问题,即类即类B B的构造函数如何定义?的构造函数如何定义?例如有以下的类例如有以下的类:class Xclass X 类名类名1 1 对象成员名对象成员名1;1;类名类名2 2 对象成员名对象成员名2;2;类名类名n n 对象成员名对象成员名n;n;一般来说一般来说,类类X X的构造函数的定义形式为的构造函数的定义形式为;X:X(X:X(形参表形参表0):0):对象成员名对象成员名1(1(形参表形参表1),1),对象成员名对象成员名i(i(形参表形参表i),i),对象成员名对象成员名n(n(形参表形参表n)n)/构造函数体构造函数体 4-7 4-7 常类型常类型 4.7.1 常引用 如果在说明引用时用const修饰,则被说明的引用为常引用。常引用的说明形式如下:const 类型说明符&引用名例如:int a=5;const int&b=a;其中,b是一个常引用,它所引用的对象不允许更改。例例4.28 常引用作函数形参。常引用作函数形参。#includeint add(const int&i,const int&j);void main()int a=20;int b=30;couta+b=add(a,b)endl;int add(const int&i,const&j)return i+j;4.7.2 4.7.2 常对象常对象 如如果果在在说说明明对对象象时时用用constconst修修饰饰,则则被被说说明的对象为常对象。明的对象为常对象。常对象的说明形式如下常对象的说明形式如下:类名类名 const const 对象名对象名(参数表参数表););或者或者 const const 类名类名 对象名对象名(参数表参数表););在定义对象时必须进行初始化在定义对象时必须进行初始化,而且不而且不能被更新。能被更新。例例4.29 4.29 非常对象和常对象的比较。非常对象和常对象的比较。#include#include class Sample class Sample public:public:int m;int m;Sample(int i,int j)m=i;n=j;Sample(int i,int j)m=i;n=j;void setvalue(int i)n=i;void setvalue(int i)n=i;void disply()coutm=mendl;void disply()coutm=mendl;coutn=nendl;coutn=nendl;private:private:int n;int n;void main()void main()Sample a(10,20);a.setvalue(40);Sample a(10,20);a.setvalue(40);a.m=30;a.disply();a.m=30;a.disply();4.7.3 常对象成员常对象成员 1.常数据成员常数据成员使使用用const说说明明的的数数据据成成员员称称为为常常数数据据成员。成员。如果在一个类中说明了常数据成员如果在一个类中说明了常数据成员,那那么构造函数就只能通过初始化列表对该么构造函数就只能通过初始化列表对该数据成员进行初始化数据成员进行初始化,而任何其他函数都而任何其他函数都不能对该成员赋值。不能对该成员赋值。例例4.30 常数据成员举例。常数据成员举例。#include class Date public:Date(int y,int m,int d);void showDate();const int&r;private:const int year;const int month;const int day;Date:Date(int y,int m,int d):year(y),month(m),day(d),r(year)inline void Date:showDate()coutr=rendl;coutyear.month.dayendl;void main()Date date1(1998,4,28);date1.showDate();2.常成员函数常成员函数在在类类中中使使用用关关键键字字const说说明明的的函函数数为为常常成成员员函函数数,常常成成员员函函数数的的说说明明格格式式如如下下:类型说明符类型说明符函数名函数名(参数表参数表)const;const是函数类型的一个组成部分是函数类型的一个组成部分,因因此在函数的实现部分也要带关键字此在函数的实现部分也要带关键字const。例例4.31 常成员函数的使用。常成员函数的使用。#include class Date public:Date(int y,int m,int d);void showDate();void showDate()const;private:int year;int month;int day;Date:Date(int y,int m,int d):year(y),month(m),day(d)void Date:showDate()coutShowDate1:endl;coutyear.month.dayendl;void Date:showDate()const coutShowDate2:endl;coutyear.month.dayendl;void main()Date date1(1998,4,28);date1.showDate();const Date date2(2002,11,14);date2.showDate();

    注意事项

    本文(【教学课件】第4章类和对象(二).ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开