复制构造函数定义
◆复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。
作用是用一个已存在的对象去初始化同类型的新对象。
◆class类名{
public :
类名(形参) ; //构造函数
类名( const类名&对象名) ; //复制构造函数
/.....
};
类名:类( const 类名&对象名) //复制构造函数的实现
{函数体
}
复制构造函数被调用的三种情况
◆定义一个对象时,以本类另-个对象作为初始值,发生复制构造;
◆如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;
◆如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象 ,传递给主
调函数,此时发生复制构造。
隐含的复制构造函数
◆如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成
一个隐含的复制构造函数。
◆这个构造函数执行的功能是:用初始值对象的每个数据成员,初始
化将要建立的对象的对应数据成员。
”= delete"
如果不希望对象被复制构造
◆C+ + 98做法:将复制构造函数声明为private,并且不提供函数的实现。
◆C++11做法:用"=delete" 指示编译器不生成默认复制构造函数。
例:
class Point { //Point 类的定义
public:
Point(int xx=0, int yy=0){x= xx;y=yy;} //构造函数 ,内联
Point(const Point& p) =delete; //指示编译器不生成默认复制构造函数
private:
int x, y; //私有数据
};
实例:
#include "stdafx.h"
#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 constructtor"<<endl;
}
//形参为Point类对象的函数
void fun1(Point p)
{
cout<<p.getX()<<endl;
}
//返回值为Point类对象的函数
Point fun2()
{
Point a;
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
Point a(4,5);
Point b=a;//1、用A初始化B,调用拷贝构造函数
cout<<b.getX()<<endl;
fun1(b); //2、对象B作位fun1的实参,调用拷贝构造函数
b=fun2(); //3、函数的返回值是类对象,函数返回时,调用拷贝构造函数
cout<<b.getX()<<endl;
system("pause");
return 0;
}
结果: