复制构造函数调用条件:
(1)一个对象以值传递的方式传入函数体
(2)一个对象以值传递的方式从函数体返回
(3)一个对象需要通过另外一个对象进行初始化
#include<stdio.h>
#include<iostream>
#include<stack>
#include<math.h>
#include<string.h>
using namespace std;
class A{
public:
A(){}
A(const A&a){
cout << "copy"<<endl;}
private:
};
A f(A a){
A v(a);
cout<<"1"<<endl;
A b= v;
cout<<"2"<<endl;
return b;
}
class Test
{
public:
int a;
Test(int x)
{
a = x;
}
Test(Test &test)//复制构造函数
{
cout<<"copy constructor"<<endl;
}
};
void fun1(Test test) //(1)值传递传入函数体
{
cout << "fun1()...." <<endl;
}
void fun2() //(2)值传递从函数体返回
{
Test t(2);
cout << "fun2()...." <<endl;
return t;
}
int main(){
A x;
A y;
cout<<"==========="<<endl;
A d=f(y);
cout<<"==========="<<endl;
f(y);
cout<<"==========="<<endl;
A c=f(f(x));
cout<<"==========="<<endl;
Test t1(1);
Test t2 = t1; //(3)用t1对t2做初始化
cout << "before fun1()...." <<endl;
fun1(t1);
Test t3 = fun2();
cout << "before fun2()...." <<endl;
return 0;
}
输出: