拷贝构造的功能
拷贝构造函数可以把曾经实例化好的对象的数据拷贝给新创建的数据 ,可见说拷贝构造函数在功能上是构造函数的另一种形式。都是让对象初始化。
写法:
拷贝构造函数在语法层是构造函数的重载,函数名就是类名,无返回值,参数是该类类型对象的引用(为了保护被引用对象数据不被破坏,会在类型前面加上const)
Date(const Date& d) //以日期类为例,定义拷贝构造的写法
Date d1;
Date d2(d1); //以日期类为例,实例化对象时的写法
Date d1;
Date d2 = d1; //以日期类为例,实例化对象时的另一种写法
拷贝构造函数的参数为什么是引用类型
下面是定义的日期类的拷贝构造函数,但参数并不是引用类型
Date(const Date d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
因为是传值,实例化对象时需要调用拷贝构造函数把数据拷贝过来,但拷贝数据函数的参数又需要掉用拷贝构造函数,如此就死循环了,拷贝构造函数会被无限调用。如图所示这种情况编译器会强制报错。