拷贝构造函数剖析【C++】
知识点:
解释:拷贝构造函数是一种特殊的构造函数,它具有一般构造函数的所有特性,但其形参是本类对象的引用。
作用:使用一个已经存在的对象(由拷贝构造函数参数指定)去初始化同类的一个新对象。
定义格式:构造函数名 (&类名);
三种使用情况:
用一个对象去初始化同类的另一个对象;
函数的形参是类的对象,调用函数时形参与实参的结合;
函数返回值是类的对象,函数执行返回调用;
注意:
拷贝构造函数的参数采用引用方式。若把一个真实的类对象作为参数传到拷贝构造函数,引起无穷递归;
拷贝构造函数的名字必须与类名相同,且无返回值;
拷贝构造函数只有一个参数,必须为本类对象的引用;
每一个类必须有一个拷贝构造函数。若用户定义类时未给出拷贝构造函数,则系统会自动产生一个缺省的拷贝构造函数;
该例重点阐述:为什么拷贝构造函数的参数必须为同类对象的引用?
程序运行结果:
本例中,当程序执行到 main()函数 Complex c(a); 语句时,程序会到拷贝构造函数完成“用存在的类对象 a,初始化 c 的工作”。但是,若此时拷贝构造函数的参数是一个真实的类对象而非同类对象的引用,则无法完成对类对象 c 的初始化工作。
因为没有一块儿内存空间去接收传递的对象,&c 就相当于是 a 的一个别称,该临时对象用于完成对 c 的赋值,拷贝构造函数定义中 real=c.real; real 就是 c 的实部,c.real 就是用 a 的实部去给 c 的实部赋值,虚部部分同理,所以会无限次调用该函数,即引起无穷递归。
版权声明: 本文为 InfoQ 作者【攻城狮杰森】的原创文章。
原文链接:【http://xie.infoq.cn/article/cedd85b3f7ae5ae27bd9cb83b】。文章转载请联系作者。
评论