C++ 复制构造函数

1. 复制构造函数定义

  • 复制构造函数是一种特殊的构造函数,其形参为本类的对象引用,作用是用一个已存在的对象去初始化同类型的新对象。
  • class 类名{
    public:
    类名(形参);  //构造函数
    类名(const 类名 & 对象名);  //复制构造函数
    //...
    };
    
    类名::类(const 类名 & 对象名)   //复制构造函数的实现
    {函数体}

    2. 复制构造函数被调用的三种情况

  • 定义一个对象时,以本类另一个对象作为初始值,发生复制构造;
  • 如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;
  • 如果函数的返回值是类的对象,函数执行完成后返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主函数,此时发生复制构造。

3. 隐含的复制构造函数

  • 如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个隐含的复制构造函数
  • 这个构造函数执行的功能是:用初始化对象的每个数据成员,初始化将要建立的对象的对应数据成员。

4. 举例

#include <iostream>

using namespace std;

class Point
{
public:
	Point(int X = 0, int Y = 0){ x = X; y = Y; }
	~Point();
	Point(const Point &p);   //复制拷贝构造函数声明
	void fun1(Point p);
     fun2();   //有问题??
	int getX(){ return x; }
private:
	int x, y;
};

//复制拷贝构造函数的实现
Point::Point(const Point &p)
{
	x = p.x;
	y = p.y;
	cout << "Calling the copy constructor" << endl;
}
void Point::fun1(Point p)
{
	cout << p.getX() << endl;
}
Point::fun2()
{
	Point a;
	return a;
}

Point::~Point()
{
}


int main()
{
	Point a;         //第一个对象
	Point b(a);      //情况一:用A初始化B,第一次调用拷贝构造函数
	cout << b.getX() << endl;
	fun1(b);         //情况二:对象B作为fun1的实参,第二次调用拷贝构造函数
	b = fun2();     //情况三:函数的返回值是类对象,函数返回时,调用拷贝构造函数
	cout << b.getX() << endl;

	system("pause");
	return 0;
}

上面的程序有点问题 但是对于说明三种情况下调用复制构造函数没有任何问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值