C++中复制构造函数和隐式转换

隐式转换可能发生在对象的初始化中(包括由赋值间接产生的初始化),不可能由赋值直接产生

01 #include <iostream>
02  
03 using namespace std;
04  
05 class MyClass
06 {
07 public:
08     MyClass();
09     MyClass(int i);
10     MyClass(const MyClass &c);
11     ~MyClass();
12     MyClass & operator = (const MyClass &c);
13  
14 private:
15     int m_i;
16 };
17  
18 MyClass::MyClass()
19 {
20     m_i = 0;
21     cout << "MyClass()" << endl;
22 }
23  
24 MyClass::MyClass(int i)
25 {
26     m_i = i;
27     cout << "MyClass(int i)" << endl;
28 }
29  
30 MyClass::MyClass(const MyClass &c)
31 {
32     m_i = c.m_i;
33     cout << "MyClass(const MyClass &c)" << endl;
34 }
35  
36 MyClass::~MyClass()
37 {
38  
39 }
40  
41 MyClass & MyClass::operator =(const MyClass &c)
42 {
43     m_i = c.m_i;
44     cout << "operator =(const MyClass &c)" << endl;
45     return *this;
46 }
47  
48 int main()
49 {
50     MyClass c1;     // MyClass()
51     cout << "-------------------------------" << endl;
52     MyClass c2 = 2; // MyClass(int i) 隐式转换
53     cout << "-------------------------------" << endl;
54     MyClass c3 = c2;// MyClass(const MyClass &c) 隐式转换
55     cout << "-------------------------------" << endl;
56     c1 = 2;         // MyClass(int i) 隐式转换
57                     // operator =(const MyClass &c) 无隐式转换
58     cout << "-------------------------------" << endl;
59     c3 = c2;        // operator =(const MyClass &c) 无隐式转换
60     cout << "-------------------------------" << endl;
61     return 0;
62 }

结果:

MyClass()

-------------------------------

MyClass(int i)

-------------------------------

MyClass(const MyClass &c)

-------------------------------

MyClass(int i)

operator =(const MyClass &c)

-------------------------------

operator =(const MyClass &c)

-------------------------------

posted @ 2013-09-22 09:54  来自你520的末班车  阅读(293)  评论(0编辑  收藏  举报