拷贝构造函数调用的三种情况
Posted showtime0701
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拷贝构造函数调用的三种情况相关的知识,希望对你有一定的参考价值。
拷贝构造函数的参数是本类对象的引用。
拷贝构造函数的调用有以下三种情形:
(1)用类的一个对象去初始化另一个对象时;
(2)当函数的形参是类的对象时(值传递),如果是引用传递则不会调用;
(3)当函数的返回值是类的对象或引用时。
拷贝构造函数与赋值操作符的区别:
拷贝构造函数的作用是完成对未初始化存储区的初始化,而赋值操作符则是处理一个已经存在的对象。
对一个对象赋值,当它第一次出现时,调用拷贝构造函数,以后每次出现,都调用赋值操作符。
#include <iostream>
using namespace std;
class Point{
public:
Point(int xx=0,int yy=0){x=xx;y=yy;}
Point(Point& p);
int getX(){return x;}
int getY(){return y;}
private:
int x,y;
};
Point::Point(Point& p){
x=p.x;
y=p.y;
cout<<"Calling the copy constructor
"<<endl;
}
//形参为Point类对象的函数
void fun1(Point p){
cout<<p.getX()<<endl;
}
//返回值为Point类对象的函数
Point fun2(){
Point a(1,2);
return a;
}
int main(){
Point a(4,5);
Point b=a; //第一种情况,初始化类的对象。‘=‘的意义是拷贝构造而不是赋值操作符,因为没有重载赋值操作符
cout<<b.getX()<<endl;
fun1(b); //第二种情况,类的对象作为函数参数。
b=fun2(); //第三种情况,类的对象作为函数返回值。
cout<<b.getX()<<endl;
return 0;
}
以上是关于拷贝构造函数调用的三种情况的主要内容,如果未能解决你的问题,请参考以下文章