- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
复制构造函数引用this指针静态成员
* 在调用引用类型参数的函数时,对引用类型的参数的操作实际上就是对传递给它的实参的操作,而不需要将实参拷贝一个副本给形参。因此从程序的执行效率上看,引用作为参数,在运行过程中可以节省内存资源。通常将占用存储空间较大的类型的形参设置为引用类型。 如果需要把对象作为参数传递给函数,使用引用方式既可以节省内存,又避免了多次调用构造、析构函数,节省了时间。 如果不希望调用时所用的实参被修改,可以在定义函数时,将其参数加上const限制 例如:int func(const m) * 2. 拷贝构造函数 当用一个已有的对象对正在创建的对象进行初始化时,调用拷贝构造函数函数。 能完成拷贝功能的构造函数称为拷贝构造函数。定义拷贝构造函数的格式如下: 类名::类名(《const》类名参数名) { … } C++中的拷贝构造函数有两种形式: (1) 系统自动产生。 【P39例2.7】 * class CPoint2 { int x,y; public: CPoint2(){x=0,y=0;} CPoint2(int vx,int vy) { x=vx; y=vy; } void Print(){coutx\ty\n;} }; void main10_11() { CPoint2 pt1(100,200); CPoint2 pt2(pt1); //A CPoint2 pt3=pt1; //B pt3=pt2; //C pt1.Print(); pt2.Print(); pt3.Print(); } //A行和B行调用 //系统自动产生的复制构造函数: Cpoint::Cpoint(Cpoint pt) { x=pt.x; y=pt.y; } * class CPoint { int x,y; public: CPoint(){x=0,y=0;} CPoint(int vx,int vy) { x=vx; y=vy; } CPoint(CPoint pt) { x=pt.x; y=pt.y; cout调用拷贝构造函数CPoint(CPoint )!\n; } void Print(){coutx\ty\n;} }; void main() { Cpoint pt1(100,200); pt1.Print(); CPoint pt2(pt1); //A pt2.Print(); CPoint pt3=pt1; //B pt3.Print(); cout标志...\n; pt3=pt2; //C } 用户自定义构造函数 * 自定义拷贝构造函数 系统自动产生的拷贝构造函数能够处理绝大多数问题,但有些问题却必须利用用户自定义的拷贝构造函数。 * //【例】 自定义的拷贝构造函数处理指针悬挂问题 #includestring.h class CA { char *ps; public: CA(){ps=0;} CA(char *s) //为指针ps动态分配存储空间 { ps=new char[strlen(s)+1]; strcpy(ps,s); } CA(CA s); ~CA(){if(ps) delete[]ps;} //撤消指针ps所占用的存储空间 char *GetS(){return ps;} }; * 若不定义拷贝构造函数: void main(void) { CA s1(China!); CA s2(s1); //A couts1=s1.GetS()\t; couts2=s2.GetS()\n; } 则使用系统自动产生的 复制构造函数: CA::CA(CA s) { ps=s.ps; } * 使用自定义复制构造函数 CA::CA(CA s) { if(s.ps){ //如果s中的成员数据非空的话 ps=new char[strlen(s.ps)+1]; //为当前对象的成员数据动态分配存储空间 strcpy(ps,s.ps);//将s中的成员数据拷贝给当前对象成员数据 } else ps=0; } s1=China! S2=China! * * 特殊的对象指针----this指针 问题:当用一个类创建多个对象时,编译系统分别为各对象中的成员数据分配存储空间,而这些对象的成员函数的代码却是共享的。例如,对象A调用成员函数Func(
文档评论(0)