引用和拷贝构造函数.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:31 大小:200KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

引用和拷贝构造函数.ppt

引用和拷贝构造函数.ppt

预览

免费试读已结束,剩余 21 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

8.1C++的指针和引用(略)8.1.1C++中的指针8.1.2C++中的引用(续)使用引用的规则(略)8.1.3函数中的引用例:引用作参数和返回值例:引用作参数和返回值8.1.3函数中的引用(续)8.2拷贝构造函数8.2.1活动记录(Activerecord)(略)8.2.2如何实现按值传递和返回值?8.2.2如何实现按值传递和返回值?8.2.2如何实现按值传递和返回值?8.2.2.1位拷贝8.2.3对象的初始化问:位拷贝有什么问题?答:尽管对象由一个内存区的比特位构成,但对象具有含义,因此对象远比一组比特位要复杂得多。而对象的这些含义往往不能由简单的位拷贝来很好地反映。例:位拷贝的缺陷};intHowMany::objectCount=0;//按值传递和返回HowManyf(HowManyx){x.print("xargumentinsidef()");returnx;}intmain(){HowManyh;HowMany::print("afterconstructionofh");HowManyh2=h;HowMany::print("afterh2=h");}///:~输出结果:afterconstructionofh:objectCount=1Aftercalltof():objectCount=1~HowMany():objectCount=0~HowMany():objectCount=-18.2.4问题&解决8.2.5拷贝构造函数例:howmany2//Thecopy-constructor:HowMany2(constHowMany2&h):name(h.name){name+="copy";++objectCount;print("HowMany2(constHowMany2&)");}voidprint(conststring&msg="")const{if(msg.size()!=0)cout<<msg<<endl;cout<<'\t'<<name<<":"<<"objectCount="<<objectCount<<endl;}};intHowMany2::objectCount=0;//PassandreturnBYVALUE:HowMany2f(HowMany2x){x.print("xargumentinsidef()");out<<"Returningfromf()"<<endl;returnx;}intmain(){HowMany2h("h");out<<"Enteringf()"<<endl;HowMany2h2=f(h);h2.print("h2aftercalltof()");out<<"Callf(),noreturnvalue"<<endl;f(h);out<<"Aftercalltof()"<<endl;}///:~8.2.6默认拷贝构造函数例:Cstring(课堂习题)Cstring::Cstring(constCstring&obj){sz=obj.sz;str=newchar[sz];memcpy(str,obj.str,sz);}…;8.3指向成员的指针(略)#include<iostream>usingnamespacestd;classWidget{voidf(int)const{cout<<"Widget::f()\n";}voidg(int)const{cout<<"Widget::g()\n";}voidh(int)const{cout<<"Widget::h()\n";}voidi(int)const{cout<<"Widget::i()\n";}enum{cnt=4};void(Widget::*fptr[cnt])(int)const;public:Widget(){fptr[0]=&Widget::f;//Fullspecrequiredfptr[1]=&Widget::g;fptr[2]=&Widget::h;fptr[3]=&Widget::i;}voidselect(inti,intj){if(i<0||i>=cnt)return;(this->*fptr[i])(j);}intcount(){returncnt;}};intmain(){Widgetw;for(inti=0;i<w.count();i++)w.select(i,47);}///:~小结