C++的拷贝构造函数
深入理解拷贝构造函数
版权声明
该文档参考了郑秋生主编的《C/C++程序设计教程-----面向对象分册》,并加入了本人自己的理解,如果有错误或者理解不恰当的地方,还望指出
拷贝构造函数
C++允许同型变量之间的赋值,例如,int a = 100; int b = a;
对象是一种复杂的类类型,很多时候我们需要用一个对象去创建另外一个对象,或者将一个对象赋值给另一个对象,这时就需要用到拷贝构造函数。
拷贝构造函数的定义格式
拷贝构造函数的定义格式如下:
类名::拷贝构造函数名(类名& 引用名)
例如:
Cdate::Cdate(Cdate & c)
//形参是对象的引用
Cstring(const Cstring & str)
//形参是一个const的对象引用
调用拷贝构造函数的情形
通常在以下三种情况下,需要调用拷贝构造函数:
(1)明确表示由一个对象初始化另一个对象,如Cdate day(d1)。
(2)当对象作为函数实参传递给函数形参时,如fun(Cdate d1)。
(3)当对象作为函数的返回值,创建一个临时对象。
Example 1
设计一个复数类,两个数据成员分别表示虚数的实部和虚部。
两个构造函数分别在不同的情况下初始化对象,add函数完成两个虚数的加法,print函数用于输出函数。
#ifndef _COMPLEX_H
#define _COMPLEX_H
plex
{
public:
Complex(double r,double i);
plex &c);
Complex plex c);
void print(void);
private:
double real,image;
};
#endif
#"
#include<>
Complex::Complex(double r,double i):real(r),image(i)
{
cout<<"调用两个参数的构造函数"<<endl;
}
Complex::plex &c)
{
real = ;
image = ;
cout<<"调用拷贝构造函数"<<endl;
}
plex::print(void)
{
cout<<"("<<real<<","<<image<<")"<<endl;
}
plex::plex c)
{
Complex y(real + ,image + );
return y;
}
void plex n)
{
cout<<“n=";
();
}
拷贝构造函数 来自淘豆网m.daumloan.com转载请标明出处.