拷贝构造函数调用的时机
C++拷贝构造函数调用时机有3种
1.将一个已经创建的对象来初始化另一个对象
1 stu s2(10); //有参构造函数调用 2 stu s3(s2);//拷贝构造函数调用 3 cout << "s2 age is " << s2.s_age << endl;
2.值传递的方式给函数传值
1 void work(stu s) 2 { 3 4 } 5 void test01() 6 { 7 stu s; 8 work(s); 9 } 10 int main() 11 { 12 //test(); 13 test01(); 14 return 0; 15 }
3.以值方式返回局部对象
1 stu go() 2 { 3 stu p1; 4 cout << (int*)&p1 << endl; 5 return p1; 6 } 7 8 void test02() 9 { 10 stu w = go(); 11 cout << (int*)&w << endl; 12 } 13 int main() 14 { 15 //test(); 16 //test01(); 17 test02(); 18 return 0; 19 }
完整代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 class stu 5 { 6 public: 7 stu() 8 { 9 puts("stu无参构造函数调用"); 10 } 11 12 stu(int age) 13 { 14 s_age = age; 15 puts("stu有参构造函数调用"); 16 } 17 18 stu(const stu &s) 19 { 20 //将传入的学生的所有属性全部拷贝到我身上 21 s_age = s.s_age; 22 puts("stu拷贝构造函数调用"); 23 } 24 ~stu() 25 { 26 puts("stu析构函数调用"); 27 } 28 int s_age; 29 }; 30 //调用 31 void test() 32 { 33 34 stu s2(10); //有参构造函数调用 35 stu s3(s2);//拷贝构造函数调用 36 cout << "s2 age is " << s2.s_age << endl; 37 cout << "s3 age is " << s3.s_age << endl; 38 } 39 40 void work(stu s) 41 { 42 43 } 44 void test01() 45 { 46 stu s; 47 work(s); 48 } 49 50 stu go() 51 { 52 stu p1; 53 cout << (int*)&p1 << endl; 54 return p1; 55 } 56 57 void test02() 58 { 59 stu w = go(); 60 cout << (int*)&w << endl; 61 } 62 int main() 63 { 64 //test(); 65 //test01(); 66 test02(); 67 return 0; 68 }