特点
- 也是一种构造函数,其函数名和类名相同,没有返回值类型
- 只有一个参数,且是同类对象的引用
- 每个类都必须有一个拷贝构造函数,系统会提供默认构造函数,程序员也可自定义
1.自定义构造函数
一般形式:
类名::类名(const 类名 & 对象名)
{
//拷贝构造函数的函数体
}
class Point{
public:
Point(int a,int b)
{
x = a;
y = b;
}
Point(const Point &p) //拷贝构造函数
{ x = 2 * p.x;
y = 2 * p.y;
}
.
.
.
private:
int x,y;
};
2.默认拷贝函数
# include< iostream>using namespacestd;class Pointl
publ ic:
Point (int a, int b)( x=a;
y=b;
void print()
( cout«x«<""y«endl;
private:intx, y;);
intmain()
Point P130,40,
Point Dp2(p1);
Point p3=p1;
p1.print () ;
p2 print() ;
p3.print () ;
return 0 ;
30 40
30 40
30 40
3.调用拷贝构造函数的3种情况
普通构造函数是在水箱创建时被调用,而拷贝构造函数在以下三种情况下都会被调用:
- 当用类的一个对象去初始化该类的另一个对象时
Point p2(p1);
Point p3 = p1l
-
当函数的形参是类的对象,在调用函数进行形参和实参结合时
-
当函数的返回值是类的对象,在函数调用完毕将返回值(对象)带回函数调用处时。此时将调用拷贝构造函数,将此对象复制给一个临时对象并传到该函数的调用处