欢迎来到天天文库
浏览记录
ID:58886633
大小:468.50 KB
页数:63页
时间:2020-09-30
《C程序设计基础ppt课件第89讲 类和对象(二).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++程序设计基础主讲人:曹岳辉2011年春季学期第8-9讲类和对象(二)对象指针和对象引用数组常类型子对象和堆对象类型转换主要内容§1对象指针和对象引用指向类的成员的指针对象指针和对象引用作函数参数this指针指向数据成员的指针格式为:<类型说明符><类名>::*<指针名>指向成员函数的指针格式为:<类型说明符>(<类名>::*<指针名>)(<参数表>)例如:classA{public:intfun(intb){returna*c+b;}A(intI){a=I;}intc;private:inta;};i
2、ntA::*pc=&A::c;//定义一个指向类A的c的指针pcint(A::*pfun)(int)=A::fun;//定义一个指向类A的成员函数fun的指针pfun指向类的成员的指针intA::*pa=&A::a;//error类A中的a是私有成员,指针pa是无权访问的。定义好指向类成员的指针后,在使用之前,同样需要先确定对象,再通过指针来指向对象中的成员。如:Aa;a.*pc=8;cout<<(a.*pfun)(5);A*p=&a;//定义一个指向对象的指针p->*pc=8;cout<<(p->*pfu
3、n)(5);对象指针和对象引用作函数参数其优点有:一、作为传址调用,实现函数间信息传递二、提高运行效率,减少时空开销。显然,对象指针为形参时,对应实参应为对象的地址值。例如:#includeclassM{public:M(){x=y=0;}M(inti,intj){x=i;y=j;}1、对象指针作函数参数voidcopy(M*m);voidsetxy(inti,intj){x=i;y=j;}voidprint(){cout<4、,y;};voidM::copy(M*m)//成员函数定义{x=m->x;y=m->y;}voidfun(Mm1,M*m2);//一般函数说明voidmain(){Mp(5,7),q;//定义对象q.copy(&p);fun(p,&q);p.print();q.print();}以p对象的地址为实参形参为对象指针以q对象的地址值为实参对象指针和对象引用作函数参数voidfun(Mm1,M*m2)//一般函数定义{m1.setxy(12,15);m2->setxy(22,25);}第一个形参为对象第二个形参为5、对象指针实参——形参形参pqm1m2实参5700572008200822251215572225过程调用后过程调用中5720082008575757对象指针和对象引用作函数参数显然,对象引用为形参时,对应实参应为对象名。例如:#includeclassM{public:M(){x=y=0;}M(intI,intj){x=I;y=j;}voidcopy(M&m);voidsetxy(inti,intj){x=I;j=j;}voidprint(){cout<6、l;}private:intx,y;};2、对象引用作函数参数形参为对象引用对象指针和对象引用作函数参数voidM::copy(M&m)//成员函数定义{x=m.x;y=m.y;}voidfun(Mm1,M&m2);//一般函数说明voidmain(){Mp(5,7),q;//定义对象q.copy(p);fun(p,q);p.print();q.print();}voidfun(Mm1,M&m2)//一般函数定义{m1.setxy(12,15);m2.setxy(22,25);}以p对象名为实参以q对象名为7、实参第二个形参为对象引用对象指针和对象引用作函数参数实参——形参形参pqm1m2实参57005722251215572225过程调用后过程调用中57575757对象指针和对象引用作函数参数This是一个隐含于每一个类的非静态成员函数中的特殊指针。用于指向正在操作该成员函数的对象。例如:#includeclassA{public:A(){a=b=0;}A(intI,intj){a=I;b=j;}voidcopy(A&aa);voidprint(){cout<8、dl;}private:inta,b;};相当于:voidcopy(A*this,A&aa);This指针voidA::copy(A&aa)//成员函数定义{if(this==&aa)return;*this=aa;}voidmain(){Aa1,a2(3,4);a1.copy(a2);//调用成员函数a1.print();}注意:此时,操作copy成员函数的对象为a1,因此,this指针指向a1。当某个对象调用
4、,y;};voidM::copy(M*m)//成员函数定义{x=m->x;y=m->y;}voidfun(Mm1,M*m2);//一般函数说明voidmain(){Mp(5,7),q;//定义对象q.copy(&p);fun(p,&q);p.print();q.print();}以p对象的地址为实参形参为对象指针以q对象的地址值为实参对象指针和对象引用作函数参数voidfun(Mm1,M*m2)//一般函数定义{m1.setxy(12,15);m2->setxy(22,25);}第一个形参为对象第二个形参为
5、对象指针实参——形参形参pqm1m2实参5700572008200822251215572225过程调用后过程调用中5720082008575757对象指针和对象引用作函数参数显然,对象引用为形参时,对应实参应为对象名。例如:#includeclassM{public:M(){x=y=0;}M(intI,intj){x=I;y=j;}voidcopy(M&m);voidsetxy(inti,intj){x=I;j=j;}voidprint(){cout<6、l;}private:intx,y;};2、对象引用作函数参数形参为对象引用对象指针和对象引用作函数参数voidM::copy(M&m)//成员函数定义{x=m.x;y=m.y;}voidfun(Mm1,M&m2);//一般函数说明voidmain(){Mp(5,7),q;//定义对象q.copy(p);fun(p,q);p.print();q.print();}voidfun(Mm1,M&m2)//一般函数定义{m1.setxy(12,15);m2.setxy(22,25);}以p对象名为实参以q对象名为7、实参第二个形参为对象引用对象指针和对象引用作函数参数实参——形参形参pqm1m2实参57005722251215572225过程调用后过程调用中57575757对象指针和对象引用作函数参数This是一个隐含于每一个类的非静态成员函数中的特殊指针。用于指向正在操作该成员函数的对象。例如:#includeclassA{public:A(){a=b=0;}A(intI,intj){a=I;b=j;}voidcopy(A&aa);voidprint(){cout<8、dl;}private:inta,b;};相当于:voidcopy(A*this,A&aa);This指针voidA::copy(A&aa)//成员函数定义{if(this==&aa)return;*this=aa;}voidmain(){Aa1,a2(3,4);a1.copy(a2);//调用成员函数a1.print();}注意:此时,操作copy成员函数的对象为a1,因此,this指针指向a1。当某个对象调用
6、l;}private:intx,y;};2、对象引用作函数参数形参为对象引用对象指针和对象引用作函数参数voidM::copy(M&m)//成员函数定义{x=m.x;y=m.y;}voidfun(Mm1,M&m2);//一般函数说明voidmain(){Mp(5,7),q;//定义对象q.copy(p);fun(p,q);p.print();q.print();}voidfun(Mm1,M&m2)//一般函数定义{m1.setxy(12,15);m2.setxy(22,25);}以p对象名为实参以q对象名为
7、实参第二个形参为对象引用对象指针和对象引用作函数参数实参——形参形参pqm1m2实参57005722251215572225过程调用后过程调用中57575757对象指针和对象引用作函数参数This是一个隐含于每一个类的非静态成员函数中的特殊指针。用于指向正在操作该成员函数的对象。例如:#includeclassA{public:A(){a=b=0;}A(intI,intj){a=I;b=j;}voidcopy(A&aa);voidprint(){cout<8、dl;}private:inta,b;};相当于:voidcopy(A*this,A&aa);This指针voidA::copy(A&aa)//成员函数定义{if(this==&aa)return;*this=aa;}voidmain(){Aa1,a2(3,4);a1.copy(a2);//调用成员函数a1.print();}注意:此时,操作copy成员函数的对象为a1,因此,this指针指向a1。当某个对象调用
8、dl;}private:inta,b;};相当于:voidcopy(A*this,A&aa);This指针voidA::copy(A&aa)//成员函数定义{if(this==&aa)return;*this=aa;}voidmain(){Aa1,a2(3,4);a1.copy(a2);//调用成员函数a1.print();}注意:此时,操作copy成员函数的对象为a1,因此,this指针指向a1。当某个对象调用
此文档下载收益归作者所有