拷贝构造函数调用的时机

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 }
View Code

猜你喜欢

转载自www.cnblogs.com/mch5201314/p/11584004.html