首页 > 编程知识 正文

什么叫复制构造函数?复制构造函数何时被调用?,复制构造函数何时被调用

时间:2023-05-05 14:44:55 阅读:157752 作者:2241

什么是复制构造函数:

复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性。 其形参是对类的对象的引用。 例如,(类名 对象名)。 其目的是使用由复制构造函数的参数确定的现有对象初始化类的新对象。 那么,一般在什么情况下调用复制构造函数呢? 有三种情况。

(1)当用类的一个对象去初始化该类的另一个对象的时候

: int main (

{

pointa (1,2 ); 调用//类的构造函数(Point类)

pointb(a ); //用现有对象a初始化新的对象b,并调用复制构造函数

Point c=a; //用现有对象a初始化新的对象c,并调用复制构造函数

返回0;

}

(2)如果函数的形参是类的对象,调用此函数的时候,进行形参和实参相结合时,复制构造函数被调用

33558www.Sina.com/voidf(pointp ) )。

{

coutp.getX () endl;

}

int main () )

{

pointa (1,2 );

f(a ); //函数的参数是类的对象,调用函数时,会结合实际参与型参数,调用复制构造函数

返回0;

}

注意:只有在按值传递对象时才会调用复制构造函数,而在传递引用时不会调用复制构造函数。

例:

(3)如果函数的返回值是类的一个对象,函数执行完成返回调用者时,复制构造函数被调用: Point g ()

{

pointa (1,2 );

return a; //函数的返回值是类的对象a,返回函数值时将调用复制构造函数

}

int main () )

{

点b;

b=g (;

返回0;

}

注意:这种情况下,表面上的函数g将a返回主函数,但a是g () )的本地对象,离开制作他的函数g后a不存在,返回主函数后也不能继续存在,所以应对这种情况时编译系统执行语句“returna”时,此临时对象的生存期只是在有函数调用的表达式中,实际上是调用复制构造函数将a的值复制到临时对象中,因此现在调用了复制构造函数。 函数g执行完毕后,对象a消失,但临时对象存在于表达式“b=g ()”中。 计算此表达式时,临时对象的任务也会完成,更改临时对象时会自动消失。

以上是经常调用复制构造函数的三种情况。 在下面写下类Point。 请作为参考。

类点

{

公共:

point(intxx=0,int yy=0) /构造函数,带形式参数

{

x=xx; y=yy;

}

点(pointp; //复制构造函数

int getX () { return x; }

……

私有:

int x,y;

(;

实现point:point(pointp ) /复制构造函数

{

x=p.x;

y=p.y;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。