自定义拷贝构造函数
类名::类名(const 类名 &对象名)
{
拷贝构造函数的函数体
}
利用下述语句调用拷贝构造函数
Rectangle p2(p1);
#include<iostream>
using namespace std;class Rectangle
{
public:
Rectangle(int len,int wid)
{
length=len;
width=wid;
cout<<"using normal constructing"<<endl;
}
Rectangle(const Rectangle &p)
{
length=2*p.length;
width=2*p.width;
cout<<"using copy constructing"<<endl;
}
void display()
{
cout<<length<<" "<<width<<endl;
}
private:
int length;
int width;
};
int main()
{
Rectangle p1(30,40);
Rectangle p2=p1;//p2(p1)是一样的 虽然形式上看是将对象p1赋值给了对象p2,但实际上是调用的是拷贝构造函数,运行结果没有发生变化;
p1.display();p2.display();
return 0;
}
当把自定义拷贝构造函数去掉
#include<iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(int len,int wid)
{
length=len;
width=wid;
cout<<"using normal constructing"<<endl;
}
void display()
{
cout<<length<<" "<<width<<endl;
}
private:
int length;
int width;
};
int main()
{
Rectangle p1(30,40);
Rectangle p2(p1);
Rectangle p3=p1;
p1.display();
p2.display();
p3.display();
return 0;
}
输出结果
using normal constructing
30 40
30 40
30 40
上面由于没用用户自定义的拷贝构造函数,因此在定义p2 p3 的时候用代入法 赋值法的形式后,调用了系统默认的拷贝构造函数,导致p2 p3 与p1的数据成员的值完全相同