类体外复制构造函数的定义格式:
<类名>::<类名>(const <类名> &<对象名>)
{
//把已知的对象的每个数据的值都复制到新创建的对象中而不做其他处理
}
1.形式上的不同:两者虽然函数名与类名相同,也不指定函数类型。但复制构造函数只有一个参数,并且是对同类对象的引用-------复制构造函数无法重载。
eg: Time time1(15, 10, 5);
Time time2(time1); //实参是对象名
2.两者被调用的情况不同:
对于赋值构造函数,只会在以下三种情况发生时被调用:
1.建立一个新对象,并用另一个同类的对象初始化
2.当函数的参数为类对象,在调用时需要将实参对象完整的传递给形参
eg: void fun (Time b) //形参为类对象
{······}
int main()
{
Time time1(10, 12, 13);
fun(time1);
return 0;
}
3.当函数的返回值是类对象:
eg: Time f()
{
Time time1(10, 15, 20);
return time1;
//time1 为f内部声明的对象,在f调用结束前将time1放入一个临时创建的Time类对象中
//并将这个临时对象复制给main中的time2,time1对象在f调用结束后就释放了
}
int main()
{
Time time2;
time2 = f();
return 0;
}