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)
-------------------------------