类和对象的使用--课件

上传人:无*** 文档编号:241719034 上传时间:2024-07-18 格式:PPT 页数:119 大小:1.36MB
返回 下载 相关 举报
类和对象的使用--课件_第1页
第1页 / 共119页
类和对象的使用--课件_第2页
第2页 / 共119页
类和对象的使用--课件_第3页
第3页 / 共119页
点击查看更多>>
资源描述
1ppt课件课件主要内容构造函数构造函数,重重载构造函数;析构函数构造函数;析构函数对象数象数组和和对象指象指针公用数据的保公用数据的保护:静:静态成成员对象的象的赋值和复制:拷和复制:拷贝构造函数构造函数友元友元类模板模板2ppt课件课件1.#include 2.using namespace std;3.class Date 4.public:5.void setDate(int y,int m,int d);6.void showDate();7.private:8.int year,month,day;9.;10.void Date:setDate(int y,int m,int d)11.year=y;month=m;day=d;12.void Date:showDate()13.coutyear.month.dayendl;构造函数构造函数 3ppt课件课件13.void main()14.15.Date date1;16.date1.setDate(2008,8,8);17.coutDate1 output1:endl;18.date1.showDate();19.4ppt课件课件5ppt课件课件#include using namespace std;class Date public:Data(int y,int m,int d);void showDate();private:int year,month,day;Date:Date(int y,int m,int d)year=y;month=m;day=d;inline void Date:showDate()coutyear.month.dayendl;构造函数构造函数6ppt课件课件利用构造函数创建对象其一般形式其一般形式为:类名名对象名象名(实参表参表);Date date1(2008,8,8);7ppt课件课件void main()Date date1(2008,8,8);coutDate1 output1:endl;date1.showDate();8ppt课件课件构造函数的特点类的一个成的一个成员函数;函数;未声明返回未声明返回值类型;型;名字与名字与类名相同;名相同;未未显式地式地调用。用。公有函数公有函数注注意意:一一个个类类中中可可以以定定义义多多个个参参数数个个数数或或参参数数类类型型不不同同的构造函数。的构造函数。练习:练习:仿照上例,编写仿照上例,编写coordcoord类的构造函数类的构造函数9ppt课件课件构造函数的作用构造函数用于构造函数用于为对象分配空象分配空间和和进行初始化行初始化class Studentstring name;int age;int*score;int courseNum;public:Student(string n,int a,int cn);void showStudent();Student:Student(string n,int a,int cn)name=n;age=a;courseNum=cn;score=new intcourseNum;for(int i=0;i scorei;void Student:showStudent().10ppt课件课件Date:Date(int y,int m,int d)year=y;month=m;day=d;Date:Date()year=2001;month=1;day=1;Date:Date(int y)year=y;month=1;day=1;inline void Date:showDate()coutyear.month.dayendl;#include using namespace std;class Date public:Date(int y,int m,int d);Date();Date(int y);void showDate();private:int year,month,day;构造函数的重载一个类中可以定义多个参数一个类中可以定义多个参数个数或参数类型不同个数或参数类型不同的构造函数。的构造函数。11ppt课件课件void main()Date date1(2008,8,8);Date date2;Date date3(2008);coutDate1 output1:endl;date1.showDate();coutDate2 output2:endl;date2.showDate();coutDate3 output3:endl;date3.showDate();构造函数的重载12ppt课件课件说明:明:构造函数允构造函数允许被重被重载对象定象定义时,只能有一个构造函数起作用,只能有一个构造函数起作用使用无参构造函数使用无参构造函数创建建对象象时不用加()不用加()重重载构造函数构造函数时应避免二避免二义性性构造函数的重载练习:练习:仿照上例,编写仿照上例,编写coordcoord类的构造函数类的构造函数13ppt课件课件14ppt课件课件Date:Date()没没有有显式式定定义构构造造函函数数时,系系统默默认提提供供的的(另另有一种有一种说法是某些情况下才提供默法是某些情况下才提供默认构造函数)构造函数)默默认构造函数不构造函数不进行行变量初始化量初始化定定义对象象时,不需要,不需要()一旦定一旦定义了构造函数,就不再提供默了构造函数,就不再提供默认构造函数构造函数默认构造函数15ppt课件课件Date:Date(int y,int m,int d)year=y;month=m;day=d;Date:Date(int y)year=y;month=1;day=1;inline void Date:showDate()coutyear.month.dayendl;#include using namespace std;class Date public:Date(int y,int m,int d);Date(int y);void showDate();private:int year,month,day;默认构造函数16ppt课件课件int main()Date date1(2008,8,8);Date date2;Date date3(2008);coutDate1 output1:endl;date1.showDate();coutDate2 output2:endl;date2.showDate();coutDate3 output3:endl;date3.showDate();return 0;默认构造函数17ppt课件课件Date:Date(int y,int m,int d)year=y;month=m;day=d;inline void Date:showDate()coutyear.month.dayendl;#include using namespace std;class Date public:Date(int y=2001,int m=1,int d=1);void showDate();private:int year,month,day;带缺省参数的构造函数Date:Date(int y,int m,int d)year=y;month=m;day=d;inline void Date:showDate()coutyear.month.dayendl;#include using namespace std;class Date public:Date(int y=2001,int m=1,int d=1);void showDate();private:int year,month,day;18ppt课件课件int main()Date date1(2008,8,8);Date date2;Date date3(2008);coutDate1 output1:endl;date1.showDate();coutDate2 output2:endl;date2.showDate();coutDate3 output3:endl;date3.showDate();return 0;带缺省参数的构造函数19ppt课件课件说明构构造造函函数数在在类外外定定义,则默默认参参数数应该在在类的的声声明明构构造造函函数原型数原型时指指定,而不能在定,而不能在类外定外定义时指定指定部分部分给默默认参数,取默参数,取默认值的参数必的参数必须在参数右在参数右边。Date(int y=2012,int m,int);Date d(6,6);调用用时,若一个参数省略,若一个参数省略,则其后参数必其后参数必须全省略全省略 Date(int y,int m=1,int n=1);Date d(2012,6)一一个个类中中定定义了了全全部部是是默默认参参数数的的构构造造函函数数后后,不不能能再再定定义重重载构造函数。(二构造函数。(二义性)性)Date();Date(int y=0,int m=0,int d=0)练习:练习:用带默认参数的形式,编写用带默认参数的形式,编写CoordCoord类的构造函数类的构造函数20ppt课件课件成员初始化表带有成有成员初始化表的构造函数的一般形式如下初始化表的构造函数的一般形式如下:类名名:构造函数名构造函数名(参数表参数表):(成成员初始化表初始化表)/构造函数体构造函数体成成员初始化表初始化表的一般形式的一般形式为:数据成数据成员名名1(初始初始值1),数据成数据成员名名2(初始初始值2),21ppt课件课件成员初始化表Date:Date(int y,int m,int d):year(y),month(m),day(d)inline void Date:showDate()coutyear.month.dayendl;#include using namespace std;class Date public:Date(int y,int m,int d);void showDate();private:int year,month,day;22ppt课件课件1.#include 2.using namespace std;3.class A4.public:5.A(int x1):x(x1),rx(x),pi(3.14)/rx(x)相当于相当于rx=x,6./pi(3.14)相相当当于于pi=3.147.void print()8.coutx=x rx=rx pi=pi;9.private:10.int x,rx;const float pi;11.;成员初始化表成员初始化表 23ppt课件课件注意1.若若要要将将数数据据成成员存存放放在在堆堆或或数数组中中,则应在在构构造造函函数数中中进行行赋值,不能使用成,不能使用成员初始化表。初始化表。class Studentstring name;int age;int*score;int courseNum;public:Student(string n,int a,int cn);void showStudent();24ppt课件课件Student:Student(string n,int a,int cn):name(n),age(a),courseNum(cn)score=new intcourseNum;for(int i=0;i scorei;25ppt课件课件2.类成成员按按它它们在在类里里被被声声明明的的顺序序进行行初初始始化化,与与其其在在成成员初始化表中列出的初始化表中列出的顺序无关。序无关。#include using namespace std;class Testpublic:Test(int m):k(m),i(k+2)void Show()coutiendlk;private:int i;int k;void main()Test t1(6);t1.Show();注意26ppt课件课件成员初始化表设计Box类,计算盒子体算盒子体积。用以下三种方式初始化用以下三种方式初始化Box类:带参构造函数,接收参数分参构造函数,接收参数分别给长宽高高赋值 默默认构造函数,使得构造函数,使得长宽高初始化高初始化为(10,10,10)带默默认参数的构造函数,使不提供参数参数的构造函数,使不提供参数时长宽高初始化高初始化为(1,1,1)成成员初始化表完成初始化表完成长宽高的初始化高的初始化写出写出SalarySalary类的构造函数类的构造函数1.通常,在构造函数中只做简单初始化,不写复杂程序通常,在构造函数中只做简单初始化,不写复杂程序2.构造函数中用构造函数中用new分配的存储空间,怎么收回?分配的存储空间,怎么收回?27ppt课件课件析构函数析构函数的功能:析构函数的功能:撤消撤消对象象时的清理的清理,如如释放分配放分配给对象的内存空象的内存空间等。等。析构函数的特点析构函数的特点:(1)析析构构函函数数与与构构造造函函数数名名字字相相同同,但但它它前前面面必必须加加一一个个波浪号波浪号();(2)析析构构函函数数没没有有参参数数,也也没没有有返返回回值,而而且且不不能能重重载。因因此在一个此在一个类中只能有一个析构函数中只能有一个析构函数;(3)当撤消当撤消对象象时,编译系系统会自会自动地地调用析构函数。用析构函数。28ppt课件课件#include class Date public:Date(int y,int m,int d);/构造函数构造函数 Date();/析构函数析构函数 void showDate();private:int year,month,day;Date:Date(int y,int m,int d)/构造函数的实现构造函数的实现 cout“创建创建endl;year=y;month=m;day=d;析构函数析构函数29ppt课件课件Date:Date()/析构函数的实现析构函数的实现 cout“销毁销毁endl;void Date:showDate()coutyear.month.dayendl;void main()Date date1(1998,4,28);coutDate1 output1:endl;date1.showDate();析构函数析构函数30ppt课件课件若若一一个个对象象在在完完成成其其操操作作之之前前需需要要做做一一些些内内部部处理理(如如释放由放由new动态分配的空分配的空间),),则需要需要显示定示定义析构函数。析构函数。class strchar*s;int max_len;public:str(char*)s=new charmax_len;str()delete s;析构函数析构函数模拟上例完成模拟上例完成Salary类的析构函数类的析构函数31ppt课件课件 一一个个对象象生生命命期期结束束时,该对象象的的析析构构函函数数被被自自动调用用。如如,函函数数内内的的局部局部对象象 析构函数的调用时机析构函数的调用时机void fun()cout“in fun.”endl;Date d(2001,5,6);d.showDate();void main()cout“in main.”endl;fun();cout”out of fun”endl;32ppt课件课件 全全局局对象象(在在函函数数外外定定义的的对象象)当当main函函数数结束束或或执行行exit命命令令时自自动执行行析析构构函函数数释放放对象。象。析构函数的调用时机析构函数的调用时机Date d(2001,5,6);void fun()cout“in fun.”endl;d.showDate();void main()cout“in main.”endl;fun();cout”out of fun”endl;33ppt课件课件析构函数调用顺序对对象象1 的的构造函数构造函数对对象象2 的的构造函数构造函数对对象象3 的的构造函数构造函数对对象象1 的的析构函数析构函数对对象象2 的的析构函数析构函数对对象象3 的的析构函数析构函数当有多个对象时,先构造的后析构当有多个对象时,先构造的后析构34ppt课件课件析构函数调用顺序#include using namespace std;class Student int ID;float score;public:Student(int id,float s);Student();Student:Student(int id,float s):ID(id),score(s)couthello IDendl;Student:Student()coutbye IDendl;int main()Student s1(101,80.5)Student s1(102,70.5);35ppt课件课件静静态态局局部部对对象象,则则在在第第一一次次调调用用该该函函数数建建立立对对象象时时调调用用构构造造函函数,但要在主函数结束才调用析构函数。数,但要在主函数结束才调用析构函数。void fn()student st1;/定义局部自动对象定义局部自动对象 static student st2;/定义静态局部对象定义静态局部对象 析构函数调用顺序36ppt课件课件对象数组所所谓对象数象数组是指每一数是指每一数组元素都是元素都是对象的数象的数组,。定定义一个一一个一维对象数象数组的格式如下的格式如下:类名名 数数组名名下下标表达式表达式;例如:例如:Student s10;对象象数数组中中每每个个元元素素就就是是一一个个对象象,通通过对象象可可以以访问类的的公有成公有成员。数数组名名下下标.成成员名名37ppt课件课件在在建建立立数数组组时时,同同样样要要调调用用构构造造函函数数。上上面面的的数数组组有有5050个个元元素素,要要调调用用5050次次构构造造函函数数。如如果果构构造造函函数数有有多多个个参参数数,C+C+要要求求:在在等等号号后后的的花花括括号号中中为为每每个个对对象象分分别别写写出出构构造造函函数数并并指指定定实实参参。格式为:格式为:student stn=student(student stn=student(实参实参1,1,实参实参2,2,实参实参3)3),student(student(实参实参1,1,实参实参2,2,实参实参3)3);对象数组38ppt课件课件析构函数调用顺序#include using namespace std;class Student int ID;float score;public:Student(int id,float s);Student();Student:Student(int id,float s):ID(id),score(s)couthello IDendl;Student:Student()coutbye IDendl;int main()student std 3=student(1001,87),student(1002,76),student(1003,80);39ppt课件课件#include using namespace std;class Catpublic:Cat()age=10;Cat(int n)age=n;Cat()cout析析 构构 函函 数数 被被 调调 用用ageendl;int get_age()return age;private:int age;对象数组main()Cat ob14;Cat ob24=11,22,33,44;Cat ob34=55,66;for(int i=0;i4;i+)coutob1i.get_age();coutendl;for(int i=0;i4;i+)coutob2i.get_age();coutendl;for(int i=0;i4;i+)coutob3i.get_age();coutendl;return 0;40ppt课件课件10.main()11.12.Cat ob34=Cat(11),Cat(22),Cat(33),Cat(44);13.Cat ob44=Cat(55),Cat(66);14.int i;15.for(i=0;i4;i+)16.coutob3i.get_age();17.coutendl;18.for(i=0;i4;i+)19.coutob4i.get_age();20.cout成成员名名 或或(*指指针名名).成成员名名42ppt课件课件#include class exepublic:void exe(int a)x=a;void showA()coutxshowA();(*p).showA();return 0;43ppt课件课件指向对象成员的指针对象象由由成成员组成成。对象象占占据据的的内内存存区区是是各各个个数数据据成成员占占据据的的内内存存区区的的总和和。对象象成成员也也有有地地址址,即即指指针。这指指针分分指向数据成指向数据成员的指的指针和指向成和指向成员函数的指函数的指针。44ppt课件课件1.指向对象公有数据成员的指针定定义数据成数据成员的指的指针变量量 数据数据类型型*指指针变量名量名计算公有数据成算公有数据成员的地址的地址&对象名象名.成成员名名这里的数据里的数据类型是数据成型是数据成员的数据的数据类型。型。例:例:Time t1;int*p1;/定定义一个指向整型数据的指一个指向整型数据的指针变量量 p1=&t1.hour;/假定假定hour是公有成是公有成员 cout*p1 endl;45ppt课件课件2.指向对象成员函数的指针定定义指向成指向成员函数的指函数的指针变量量数据数据类型型(类名名:*变量名量名)(形参表形参表);数据数据类型型是成员函数的类型。类名是名是对象所属的类变量名量名按标识符取名形参表形参表:指定成员函数的形参表(形参个数、类型)取成取成员函数的地址函数的地址&类名名:成员函数名46ppt课件课件给指指针变量量赋初初值指指针变量名量名=&类名名:成成员函数名函数名;用指用指针变量量调用成用成员函数函数(对象名象名.*指指针变量名量名)(实参表参表);对象名:是指定象名:是指定调用成用成员函数的函数的对象。象。*:明确其后的是一个指:明确其后的是一个指针变量。量。实参表:与成参表:与成员函数的形参表函数的形参表对应 47ppt课件课件#include using namespace std;class Time public:Time(int,int,int);int hour;int minute;int sec;void get_time();例例3.7 有关对象指针的使用方法有关对象指针的使用方法Time:Time(int h,int m,int s)hour =h;minute=m;sec=s;void Time:get_time()couthour:minute:secendl;48ppt课件课件int main()Time t1(10,13,56);int*p1=&t1.hour;/定定义指向成指向成员的指的指针p1 cout*p1get_time();/用用对象指象指针调用成用成员函数函数 void(Time:*p3)();/定定义指向成指向成员函数的指函数的指针 p3=&Time:get_time;/给成成员函数的指函数的指针赋值 (t1.*p3)();/用指向成用指向成员函数的指函数的指针调用成用成员函数函数 return 0;49ppt课件课件This指针class Coord private:int x;int y;public:Coord(int m,int n);int showXY();Coord:Coord(int m,int n)x=m;y=n;void Coord:showXY()coutx,yendl;int main()Coord c1(3,5);Coord c2(8,8);c1.showXY();c2.showXY();return 0;程序如何知道该输出哪个值?程序如何知道该输出哪个值?50ppt课件课件this,其其值是是当当前前被被调用用的的成成员函函数数所所在在的的对象象的的起起始始地地址址this,指向当前,指向当前对象的指象的指针创建建对象象时this指指针指向指向该对象;象;this指指针是是作作为隐含含的的参参数数在在调用用对象象的的函函数数时传递给该函数。函数。可以用它来确定函数可以用它来确定函数访问的是哪一个的是哪一个对象的数据成象的数据成员This指针51ppt课件课件this 指针引例void Coord:showXY(void Coord:showXY(Coord*this)Coord*this)coutcoutx,x,yyendl;int main()int main()Coord c1(3,5);Coord c1(3,5);Coord c2(8,8);Coord c2(8,8);c1.showXY(c1.showXY(&c1);&c1);c2.showXY(c2.showXY(&c2);&c2);return 0;return 0;52ppt课件课件使用this应注意的问题this的作用域的作用域仅在一个在一个对象内部。象内部。例如,在例如,在类外的外的语句:句:A a;a.this;错误在在对象内部,象内部,this指指针是一个是一个const指指针。例如:例如:this=&p;错误53ppt课件课件1.#include 2.class example3.public:4.example(int n,int m)5.x=n;y=m;6.int getX()7.return x;8.int getY()9.return y;10.private:11.int x,y;12.;用对象指针访问对象数组54ppt课件课件13.main()14.int i;15.example op4=example(1,2),example(3,4),example(5,6),example(7,8);16.example*p;17.p=&op3;18.for(i=0;i4;i+)19.coutgetX();20.coutgetY()n;21.p-;22.coutcreate();说明函函数数结结束束了了,dlg还还在在。这这个个非非模式对话框还在模式对话框还在65ppt课件课件1.1.newnew创建类对象需要指针接收,一处初始化,多处使用创建类对象需要指针接收,一处初始化,多处使用 2.2.newnew创建类对象使用完需创建类对象使用完需deletedelete销毁销毁 3.3.newnew创创建建对对象象直直接接使使用用堆堆空空间间,而而不不用用newnew定定义义类类对对象象则则使使用用栈空间栈空间 4.4.newnew对象指针用途广泛,比如作为函数返回值、函数参数等对象指针用途广泛,比如作为函数返回值、函数参数等 说明66ppt课件课件共用数据的保护共用数据的保护 如果即希望数据在一定范围内共享,又不愿它被随意修改,如果即希望数据在一定范围内共享,又不愿它被随意修改,从技术上可以把数据指定为只读型的。从技术上可以把数据指定为只读型的。C+C+提供提供constconst手段,手段,将数据、对象、成员函数指定为常量,从而实现了只读要将数据、对象、成员函数指定为常量,从而实现了只读要求,达到保护数据的目的。求,达到保护数据的目的。67ppt课件课件常类型目的:目的:为了保了保证数据共享又防止数据被改数据共享又防止数据被改动。const 类型修型修饰符符常常类型型的的变量量或或者者是是对象象成成员的的值在在程程序序运运行行期期间都都是是不不可以改可以改变的。的。68ppt课件课件常对象 定定义格式:格式:类名名 const 对象名象名(参数表参数表);或或const 类名名 对象名象名(参数表参数表);常常对象在定象在定义时必必须初始化,而且不能被更新初始化,而且不能被更新69ppt课件课件是否有错?#include class Apublic:int m;A(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()A a(10,20);a.setvalue(40);a.m=30;a.disply();const A a(10,20);注意:注意:不不允允许许直直接接或或间间接接更更改改常对象的数据成员;常对象的数据成员;不不允允许许常常对对象象调调用用普普通通的成员函数的成员函数70ppt课件课件如如果果在在常常对象象中中要要修修改改某某个个数数据据成成员,C+提提供供了了指指定定可可变的数据成的数据成员方法。方法。格式:格式:mutable 类型型数据成数据成员;在在定定义数数据据成成员时加加mutable后后,将将数数据据成成员声声明明为可可变的的数数据据成成员,就就可可以以用用声声明明为const的的成成员函函数数修修改改它它的的值。常对象71ppt课件课件常对象成员类的的数数据据成成员可可以以是是常常量量或或常常引引用用。常常数数据据成成员只只能能通通过构造函数初始化列表构造函数初始化列表进行初始化。行初始化。1.#include 2.class Date 3.public:4.Date(int y,int m,int d);5.void showDate();6.private:7.const int year,month,day;8.;72ppt课件课件1.Date:Date(int y,int m,int d):year(y),month(m),day(d),r(year)2.3.void Date:showDate()4.coutyear.month.dayendl;5.void main()6.Date date1(1998,4,28);7.date1.showDate();8.注意:注意:year,month,day初始化后不允许被修改初始化后不允许被修改73ppt课件课件常成员函数类型型 函数名(参数表)函数名(参数表)const;class Date public:Date(int y,int m,int d):year(y),month(m),day(d)void showDate();void showDate()const;private:int year,month,day;void Date:showDate()coutShowDate1;endl;coutyear.month.dayendl;74ppt课件课件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();75ppt课件课件注意:注意:1.1.在函数的在函数的实现部分也要部分也要带上关上关键字字const2.const可以用于函数重可以用于函数重载3.3.常常对象只能象只能调用常成用常成员函数,不能函数,不能调用普通的成用普通的成员函数。函数。4.4.常常成成员函函数数不不能能更更新新对象象的的数数据据成成员,也也不不能能调用用该类中中的普通的成的普通的成员函数。函数。76ppt课件课件常指针将指针变量声明为将指针变量声明为const型,指针值始终保持为其初值,不能改变。型,指针值始终保持为其初值,不能改变。一般形式为一般形式为 类型类型 *const*const 指针变量名;指针变量名;int m=1,n=2;int*const ptr1=&m;/ptr1是常指针是常指针 ptr1=&n;/错误,错误,ptr1应始终指向同一个变量应始终指向同一个变量 *ptr1=100;/ptr1所指向的变量值可以改变所指向的变量值可以改变常常见见用用途途:将将常常指指针针作作为为函函数数的的形形参参,目目的的是是不不允允许许在在函函数数执执行行过过程中改变指针变量的值,使其始终指向原来的对象。程中改变指针变量的值,使其始终指向原来的对象。指针值不可变指针值不可变,指针指向的值是否可变,取决于指向的对象。指针指向的值是否可变,取决于指向的对象。77ppt课件课件指向常对象的指针常对象,只能用指向常对象的指针变量指向它常对象,只能用指向常对象的指针变量指向它;指指向向常常对对象象的的指指针针变变量量,可可以以指指向向非非constconst的的对对象象,但但不不能能通通过过指指针来改变其指向的对象针来改变其指向的对象;当当希希望望在在调调用用函函数数时时对对象象的的值值不不被被修修改改,就就应应当当把把形形参参定定义义为为指指向向常常对对象象的的指指针针变变量量,同同时时用用对对象象的的地地址址作作实实参参(对对象象可可以以是是constconst或非或非constconst型型)。指向常对象的指针变量指向常对象的指针变量 const Time*ptr;const Time*ptr;指针变量的指向可变,指针指向的对象不可改变。指针变量的指向可变,指针指向的对象不可改变。78ppt课件课件对象的常引用如如果果用用引引用用形形参参又又不不想想让函函数数修修改改实参参,可可以以使使用用常常引引用用机制。机制。格式:格式:const 类名名&形参形参对象名象名79ppt课件课件#include using namespace std;class Time public:Time(int,int,int);int hour;int minute;int sec;例例3.8 对象的引用对象的引用 Time:Time(int h,int m,int s)hour=h;minute=m;sec=s;void fun(Time&t)t.hour=18;int main()Time t1(10,13,56);fun(t1);coutt1.hourendl;return 0;如如果果用用引引用用形形参参又又不不想想让让函函数数修修改改实实参参,可以使用常引用机制可以使用常引用机制80ppt课件课件对象的赋值和拷贝1.变量量赋值 int a=2,b;b=a;2.对象象赋值:同种:同种类型的型的对象象 对象象1=对象象2;对象象1的成的成员 对象象2的成的成员81ppt课件课件说明1.1.使用使用对象象赋值语句句时,对象的象的类型必型必须相同。相同。2.2.两两个个对象象之之间的的赋值,仅仅使使得得这些些对象象的的数数据据成成员的的值是相同的。两个是相同的。两个对象自身象自身还是分离的。是分离的。3.3.将将一一个个对象象的的值赋值给另另外外一一个个对象象时,大大多多数数情情况况下下都是成功的。但是当都是成功的。但是当类中存在指中存在指针时,可能会,可能会产生生错误例:例:例:例:testCopy.txttestCopy.txt82ppt课件课件class Date int year,month,day;public:Date(int y=2001,int m=1,int d=1):year(y),month(m),day(d)void showDate();inline void Date:showDate()coutyear,month,day静静态成成员函数名函数名(实参表参表)练习:修改练习:修改练习:修改练习:修改studentstudent类,增加类,增加类,增加类,增加sumsum数据成员记录学生成绩和数据成员记录学生成绩和数据成员记录学生成绩和数据成员记录学生成绩和 增加增加增加增加totaltotal和和和和averageaverage函数分别完成成绩求和及平均值函数分别完成成绩求和及平均值函数分别完成成绩求和及平均值函数分别完成成绩求和及平均值94ppt课件课件说明一一般般情情况况下下,静静态成成员函函数数主主要要用用来来访问全全局局变量量或或同同类中的中的静静态数据成数据成员。达到。达到对象象间数据共享。数据共享。因因静静态成成员函函数数不不含含this指指针,所所以以,静静态成成员函函数数不不访问类中中的的非非静静态成成员。若若要要访问非非静静态对象象必必须通通过对象象(或或对象指象指针)来来访问95ppt课件课件静态成员访问非静态数据成员1.#include 2.class small_cat3.public:4.small_cat(double w);5.static void display(small_cat&w);6.static void total_display();7.private:8.double weight;9.static double total_weight;10.static double total_number;11.;96ppt课件课件small_cat:small_cat(double w)weight=w;total_weight+=w;total_number+;void small_cat:display(small_cat&w)cout小猫的重量是小猫的重量是w.weightendl;void small_cat:total_display()couttotal_number小猫的重量是小猫的重量是;couttotal_weight kg endl;97ppt课件课件1.double small_cat:total_number=0;2.double small_cat:total_weight=0;3.int main()4.5.small_cat w1(0.9),w2(0.8),w3(0.7);6.small_cat:display(w1);7.small_cat:display(w2);8.small_cat:display(w3);9.small_cat:total_display();10.return 0;11.98ppt课件课件友元classclass Point Pointprivateprivate:double double x,y;x,y;publicpublic:Point(Point(intint m=0,m=0,intint n=0):x(m),y(n)n=0):x(m),y(n)void void showXY();showXY();voidvoid Point:showXY()Point:showXY()coutx,yendl;coutx,yy)?x:y;int min()return(xy)?x:y;float min()return(xy)?x:y;108ppt课件课件定定义类模板的格式:模板的格式:template class 类模板名模板名 类型型参参数数名名:按按标识符符取取名名。如如有有多多个个类型型参参数数,每每个个类型型参数都要以参数都要以class为前前导,两个,两个类型参数之型参数之间用逗号分隔。用逗号分隔。类模板名:按模板名:按标识符取名。符取名。类模板模板 内定内定义数据成数据成员和成和成员函数的函数的规则:用用类型参数作型参数作为数据数据类型,用型,用类模板名作模板名作为类。109ppt课件课件templateclass Compare private:numtype x,y;public:Compare(numtype a,numtype b)/构构造造函函数数 x=a;y=b;numtype max()return(xy)?x:y;numtype min()return(xy)?x:y;110ppt课件课件类型型参参数数 类模模板板名名:成成员函函数数名名(形形参参表表)templateclass Compare public:Compare(numtype a,numtype b)x=a;y=b;numtype max();numtype min();private:numtype x,y;111ppt课件课件 numtype Compare:max()return(xy)?x:y;numtype Compare:min()return(xy)?x:y;112ppt课件课件使用使用类模板模板时,定,定义对象的格式:象的格式:类模板名模板名 对象名象名;类模板名模板名 对象名象名(实参表参表);例如用例如用类模板模板Compare定定义对象:象:Compare cmp2(4,7);在在编译时,编译系系统用用 int 取取代代类模模板板中中的的类型型参参数数numtype,就就把把类模模板板具具体体化化了了。这时Compare 就就相当于相当于Compare_int类。113ppt课件课件 templateclass Compare private:numtype x,y;public:Compare(numtype a,numtype b)x=a;y=b;numtype max()return(xy)?x:y;numtype min()return(xy)?x:y;例例3.14 声明类模板,实现两个整数、浮点数和字符的比较声明类模板,实现两个整数、浮点数和字符的比较114ppt课件课件int main()Compare cmp1(3,7);coutcmp1.max()是两是两 个整数中的大数个整数中的大数.endl;coutcmp1.min()是两个整数中的小数是两个整数中的小数.endl;Compare cmp2(45.78,93.6);coutcmp2.max()是两个浮点数中的大数是两个浮点数中的大数.endl;coutcmp2.min()是两个浮点数中的小数是两个浮点数中的小数.endl;Compare cmp3(a,A);coutcmp3.max()是两个字符中的大者是两个字符中的大者.endl;coutcmp3.min()是两个字符中的小者是两个字符中的小者.endl;return 0;115ppt课件课件加加 油!油!116ppt课件课件问题描述:设计类模拟ATM使用过程中的界面和用户交互过程问题分析:分析:设计ATM机机类,具具有有核核对密密码,取取款款、修修改改密密码、查询信信息息、退退出出系系统、锁机机吞吞卡卡等等功功能能;账户、口口令令、余余额、姓名。姓名。(2)银行行卡卡具具有有身身份份验证、查询余余额、修修改改密密码、交交易易成成功功更改余更改余额等工能;等工能;账户、姓名、口令、余、姓名、口令、余额、状、状态。类设计实例类设计实例117ppt课件课件class X private:类名名1 对象名象名1;类名名2 对象名象名2;类名名n 对象名象名n;public:;X:X(形形参参表表):对象象名名1(形形参参1),对象象名名2(形形参参2),.对象象名名n(形参形参n)构造函数体构造函数体 对象成员定定定定义义义义学学学学生生生生类类类类,数数数数据据据据成成成成员员员员:学学学学号号号号和和和和出出出出生生生生日日日日期期期期,成成成成员员员员函函函函数数数数:构构构构造函数,显示函数造函数,显示函数造函数,显示函数造函数,显示函数118ppt课件课件练习:编写成写成绩类,能,能够记录数学,英数学,英语和和计算机三算机三门课的成的成绩编写学生写学生类,包括学号和成,包括学号和成绩信息信息对象成员119ppt课件课件
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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