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

上传人:牧羊曲112 文档编号:5658856 上传时间:2023-08-06 格式:PPT 页数:44 大小:377.97KB
返回 下载 相关 举报
【教学课件】第4章类和对象(二).ppt_第1页
第1页 / 共44页
【教学课件】第4章类和对象(二).ppt_第2页
第2页 / 共44页
【教学课件】第4章类和对象(二).ppt_第3页
第3页 / 共44页
【教学课件】第4章类和对象(二).ppt_第4页
第4页 / 共44页
【教学课件】第4章类和对象(二).ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《【教学课件】第4章类和对象(二).ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章类和对象(二).ppt(44页珍藏版)》请在三一办公上搜索。

1、,第4章 类和对象(二),4.1 自引用指针this 例 4.1 this指针的引例。#include class A public:A(int x1)x=x1;void disp()coutx=xendl;private:int x;main()A a(1),b(2);cout a:;a.disp();cout b:;b.disp();return 0;,例4.2 显示this指针的值。#includeclass Apublic:A(int x1)x=x1;void disp()coutx;private:int x;main()A a(1),b(2),c(3);a.disp();b.dis

2、p();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();coutendl;return 0;,4.2.2 对象指针,1

3、.用指针访问单个对象成员声明对象指针的一般语法形式为:类名*对象指针名;当用指向对象的指针来访问对象成员时,要用“-”操作符。,例4.7对象指针的使用。#includeclass exepublic:void set_a(int a)x=a;void show_a()coutshow_a();/利用对象指针访问对象的成员 return 0;,2.用对象指针访问对象数组,例如将例4.7的main()改写为:main()exe ob2,*p;ob0.set_a(10);ob1.set_a(20);p=ob;p-show_a();p+;p-show_a();return 0;,4.3 向函数传递对象

4、,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();

5、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();coutget()n;main()aClass obj(10);sqr(,4.3.3 使用对象引用作为函数参数,例4.13 使用对象引用作为函数参数。#includeclass aClass public:aClass(in

6、t n)i=n;void set(int n)i=n;int get()return i;private:int i;void sqr(aClass,4.4 静态成员,4.4.1 静态数据成员 在一个类中,若将一个数据成员说明为static,这种成员称为静态数据成员。与一般的数据成员不同,无论建立多少个类的对象,都只有一个静态数据的拷贝。从而实现了同一个类的不同对象之间的数据共享。定义静态数据成员的格式如下:static 数据类型 数据成员名;,例4.15静态数据成员的使用引例。#include#includeclass Student public:Student(char*name1,ch

7、ar*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,fl

8、oat 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:s

9、tu_no;coutn score:score;void Student:show_count_sum_ave()coutn count:count;/输出静态数据成员count coutn sum:sum;/输出静态数据成员sum coutn ave:ave;/输出静态数据成员aveint Student:count=0;/静态数员count初始化float Student:sum=0.0;/静态数员sum初始化float Student:ave=0.0;/静态数员ave初始化,void main()Student stu1(Liming,990201,90);stu1.show();stu

10、1.show_count_sum_ave();Student stu2(Zhanghao,990202,85);stu2.show();stu2.show_count_sum_ave();,4.4.2 静态成员函数,定义静态成员函数的格式如下:static 返回类型 静态成员函数名(参数表);与静态数据成员类似,调用公有静态成员函数的一般格式有如下几种:类名:静态成员函数名(实参表)对象.静态成员函数名(实参表)对象指针-静态成员函数名(实参表),例4.18静态成员函数来访问静态数据成员。#include#includeclass Student private:char*name;/学生姓名

11、 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=n

12、ew 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:sh

13、ow_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();/使用

14、对象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=,4.5 友 元,友元既可以是不属于任何类的一般函数,也可以是另一个类的成员函数,还可以是整个的类。,4.5.1 友元函数,友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的

15、所有对象的成员,包括私有成员、保护成员和公有成员。,例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/调用友元函数,4.5.2 友元成员,一个类的成员函数也可以作为另一个类的友元,这种成员函数不仅可以访问自己所在类对象中的所有成员,还可以访问friend声明语句所在类对象中的所有成员。这样能使两个类相互合作、协调工作,完成某一任务。,例4.24 一个类的成员函数作为另一个类的友元

16、。#include#includeclass girl;class boy public:boy(char*n,int d)name=new charstrlen(n)+1;strcpy(name,n);age=d;void disp(girl,class girl public:girl(char*n,int d)name=new charstrlen(n)+1;strcpy(name,n);age=d;friend void boy:disp(girl/访问girl类对象的成员,void main()boy b(Chen Hao,25);girl e(Zhang Wei,18);b.dis

17、p(e);程序运行结果如下:Boys name is Chen Hao,age:25 Girls name is:Zhang Wei,age:18,4.5.3 友元类,一个类也可以作为另一个类的友元。例如:class Y/;class X/friend Y;/声明类Y为类X的友元类/;,4.6 对象成员,如果一个类的对象是另一个类的数据成员,则称这样的数据成员为对象成员。例如:class A/.;class B A a;/类A的对象a为类B的对象成员 public:/;,使用对象成员着重要注意的问题是对象成员的初始化问题,即类B的构造函数如何定义?例如有以下的类:class X 类名1 对象成

18、员名1;类名2 对象成员名2;类名n 对象成员名n;一般来说,类X的构造函数的定义形式为;X:X(形参表0):对象成员名1(形参表1),对象成员名i(形参表i),对象成员名n(形参表n)/构造函数体,4-7 常类型,4.7.1 常引用 如果在说明引用时用const修饰,则被说明的引用为常引用。常引用的说明形式如下:const 类型说明符 其中,b是一个常引用,它所引用的对象不允许更改。,例4.28 常引用作函数形参。#includeint add(const int,4.7.2 常对象,如果在说明对象时用const修饰,则被说明的对象为常对象。常对象的说明形式如下:类名 const 对象名(参

19、数表);或者 const 类名 对象名(参数表);在定义对象时必须进行初始化,而且不能被更新。,例4.29 非常对象和常对象的比较。#include class Sample public:int m;Sample(int i,int j)m=i;n=j;void setvalue(int i)n=i;void disply()coutm=mendl;coutn=nendl;private:int n;void main()Sample a(10,20);a.setvalue(40);a.m=30;a.disply();,4.7.3 常对象成员,1.常数据成员 使用const说明的数据成员称为

20、常数据成员。如果在一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,而任何其他函数都不能对该成员赋值。,例4.30 常数据成员举例。#include class Date public:Date(int y,int m,int d);void showDate();const int,2.常成员函数 在类中使用关键字const说明的函数为常成员函数,常成员函数的说明格式如下:类型说明符 函数名(参数表)const;const是函数类型的一个组成部分,因此在函数的实现部分也要带关键字const。,例4.31 常成员函数的使用。#include class Date

21、 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();,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号