【C++的深度剖析教程21】类型转换函数下
上一篇文章寫了關于普通類型轉(zhuǎn)換為類類型的語法與性質(zhì),今天我們來看一下:類類型如何轉(zhuǎn)換為普通類型。
一、類型轉(zhuǎn)換函數(shù):
C++類中,可以定義類型轉(zhuǎn)換函數(shù),類型轉(zhuǎn)換函數(shù)用于將類對象轉(zhuǎn)換為其他類型。
語法規(guī)則:
operator type() {type ret;...return ret; }下面還是直接寫代碼看看什么是類型轉(zhuǎn)換函數(shù):
#include <iostream> #include <string>using namespace std;class Test {int mValue; public:Test(int i = 0){mValue = i;}int value(){return mValue;}operator int () //轉(zhuǎn)換構造函數(shù){int ret = mValue; //這里相當于有一個轉(zhuǎn)換,類的值給int了return ret;;} };int main() { Test t(100);int i = t; //等價于:i = t.operator int() ;相當于隱式的調(diào)用了成員函數(shù)operator int ()cout << "t.value() = " << t.value() << endl;cout << "i = " << i << endl;return 0; }運行結果為:
t.value() = 100
i = 100
由運行結果知,我們成功的將一個類類型的值賦值給int類型,所以說,類類型,已經(jīng)成功轉(zhuǎn)換為int類型。
可以看看下圖的巧妙的解釋:
那么總結一下類類型的一些特點:
二、類類型之間的轉(zhuǎn)換
上面講了類類型轉(zhuǎn)換為其他類型,那么類類型轉(zhuǎn)換為類類型呢?
語法與類型轉(zhuǎn)換函數(shù)類似,只不過我們類型轉(zhuǎn)換函數(shù)的類型,改為類類型即可:
看這個規(guī)則不如直接寫一段代碼,下面我們還是來直接寫一段代碼來分析吧:
#include <iostream> #include <string>using namespace std;class Test;class Value { public:Value(){}explicit Value(Test& t) //與下面的operator Value()互斥(他們均能被隱式的自動調(diào){ //用),所以加上explicit關鍵字讓它只能被顯示的調(diào)用} };class Test {int mValue; public:Test(int i = 0){mValue = i;}int value(){return mValue;}operator Value() //類類型轉(zhuǎn)換為類類型時調(diào)用的函數(shù){Value ret;cout << "operator Value()" << endl;return ret;} };int main() { Test t(100);Value v = t; //等下于v = t.operator Value()return 0; }運行結果:
operator Value()
編譯通過沒有報錯,說明這一句:Value v = t;是可以被編譯通過的,Test類類型轉(zhuǎn)換為Value類類型成功。
而這里寫成 explicit Value(Test& t),加上explicit是因為:編譯器無法抑制隱式的類型轉(zhuǎn)換函數(shù),那么它與下面的operator Value()互斥,當編譯到Value v = t這里時,需要隱式調(diào)用轉(zhuǎn)換函數(shù),可以調(diào)用Value(Test& t) ,也可以調(diào)用 operator Value(),這個時候編譯器就會犯難,報錯!!!所以在Value(Test& t) 前面加上抑制隱式;類型調(diào)用的關鍵字:explicit。
既然類型轉(zhuǎn)換函數(shù)與轉(zhuǎn)換構造函數(shù)會產(chǎn)生沖突,那么工程中是如何解決的呢?
在QT這種非常成熟的編譯器里,都是用type toType()公有成員函數(shù)代替類型轉(zhuǎn)換函數(shù)的。
看下面一個在QT中編寫的函數(shù),就很好理解了:
三、總結:
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關于嵌入式,操作系統(tǒng),C++語言,C語言,數(shù)據(jù)結構等技術問題。
總結
以上是生活随笔為你收集整理的【C++的深度剖析教程21】类型转换函数下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: This is Me!——回顾第一个项目
- 下一篇: NLP 学习笔记9-停用词