第42课 类型转换函数(下)
Posted wanmeishenghuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第42课 类型转换函数(下)相关的知识,希望对你有一定的参考价值。
问题:
类类型能否转换到普通类型?
示例如下:
可以看到上述程序中的强转是不成功的。
这时就需要引入新的语法规则了,类型转换函数:
添加类型转换函数:
运行结果如下:
分析:
上述程序中的int i = t相当于调用函数,int i = t.operator int()。
类类型之间相互转换:
示例:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Test; 7 8 class Value 9 { 10 public: 11 Value() 12 { 13 } 14 explicit Value(Test& t) 15 { 16 } 17 }; 18 19 class Test 20 { 21 int mValue; 22 public: 23 Test(int i = 0) 24 { 25 mValue = i; 26 } 27 int value() 28 { 29 return mValue; 30 } 31 operator Value() 32 { 33 Value ret; 34 cout << "operator Value()" << endl; 35 return ret; 36 } 37 }; 38 39 int main() 40 { 41 Test t(100); 42 Value v = t; 43 44 return 0; 45 }
程序中我们定义了Value对象和Test对象,Value对象中定义了转换构造函数,将Test类对象转换为一个Value类对象。而在Test类中定义了31行的类型转换函数,将一个Test类对象转换为Value类对象。
编译器在编译第42行程序时,通过上述两种方法都可以得到Value类对象,因此,它就会犯难。
当第14行不加explicit时,编译结果如下:
在工程中,我们在14行加上explicit,不希望编译器进行自动转换。
这样就可以编译通过了。
工程中不会定义类型转换函数,而是定义一个公有的成员函数代替类型转换函数。
Qt中就定义了很多公有函数,由于转换类型:
运行结果:
小结:
以上是关于第42课 类型转换函数(下)的主要内容,如果未能解决你的问题,请参考以下文章