C++中复制构造函数和隐式转换
2013-09-22 09:54
399 查看
隐式转换可能发生在对象的初始化中(包括由赋值间接产生的初始化),不可能由赋值直接产生
结果:
MyClass()
-------------------------------
MyClass(int i)
-------------------------------
MyClass(const MyClass &c)
-------------------------------
MyClass(int i)
operator =(const MyClass &c)
-------------------------------
operator =(const MyClass &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)
-------------------------------
相关文章推荐
- C++中复制构造函数和隐式转换
- c++构造函数隐式转换--转换构造函数
- 【小记备忘】之C/C++ 杂记,catch,调用构造函数,内存分配,隐式转换【2013.12.11】
- c++:explicit 抑制构造函数隐式转换
- C++在类之间调用static_cast转换时,需要复制构造函数
- c++防止构造函数隐式转换示例
- explicit:C++规定,当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换
- C++ 类型自动转换 构造函数 复制构造函数 赋值操作运算符函数
- C++ 学习之构造函数:构造函数小结3 默认构造函数、隐式类型转换和复制构造函数
- C++拾趣——类构造函数的隐式转换
- C++ 学习之构造函数:构造函数小结3 默认构造函数、隐式类型转换和复制构造函数
- C++在类之间调用static_cast转换时,需要复制构造函数
- C++ 学习之构造函数:构造函数小结3 默认构造函数、隐式类型转换和复制构造函数
- C/C++日常学习总结(第十二篇)将构造函数声明为explicit(显式)的方式可以抑制隐式转换
- 【C++基础之十七】抑制由构造函数定义的隐式转换
- C++隐式转换
- 深度搜索C++对象模型 - 复制构造函数
- C++中复制构造函数有关的一点问题
- C++ explicit关键字(隐式转换)
- C++ 对象构造, 拷贝, 赋值和隐式类型转换总结