C++ 轉(zhuǎn)換函數(shù)用法案例詳解
1.標準數(shù)據(jù)之間會進行隱式類型安全轉(zhuǎn)換,規(guī)則如下:
在這里主要探討c++中類類型與普通類型的轉(zhuǎn)換:
1.類類型轉(zhuǎn)換普通類型
class Fraction { public: Fraction(int num,int den=1); ~Fraction(); //轉(zhuǎn)換函數(shù) /* 轉(zhuǎn)換函數(shù)語法規(guī)則: operator Type() { Type ret ; ........ return ret; } */ operator double() const { return (double)(m_Numerator*1.0 / m_Denominator); } private: int m_Numerator; int m_Denominator; }; Fraction f(3, 5); double d = 4 + f;//d=4.6
這里4+f,調(diào)用轉(zhuǎn)換函數(shù)將f轉(zhuǎn)換為0.6
2.普通類型轉(zhuǎn)換為類類型(non-explicit-one-argument ctor)
class Fraction { public: Fraction(int num,int den=1); ~Fraction(); Fraction operator+(const Fraction& f) { return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator, f.m_Denominator * this->m_Denominator); } private: int m_Numerator; int m_Denominator; }; Fraction f(3, 5); Fraction d = f + 4;//調(diào)用+運算符函數(shù),4會轉(zhuǎn)為Fraction(4,1),含有接受一個參數(shù)的構(gòu)造函數(shù),否則也無法轉(zhuǎn)換
3.同時含有轉(zhuǎn)換函數(shù)和可以隱式的調(diào)用構(gòu)造函數(shù)(轉(zhuǎn)換構(gòu)造參數(shù))會報錯
class Fraction { public: /* 轉(zhuǎn)換構(gòu)造函數(shù): -有僅有一個參數(shù) -參數(shù)是基本類型 -參數(shù)是其它類型 */ Fraction(int num,int den=1); ~Fraction(); operator double() const { return (double)(m_Numerator*1.0 / m_Denominator); } Fraction operator+(const Fraction& f) { return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator, f.m_Denominator * this->m_Denominator); } private: int m_Numerator; int m_Denominator; };
報錯: “Fraction::operator +”: 2 個重載有相似的轉(zhuǎn)換 ,
所以在我們寫構(gòu)造函數(shù)都會使用關(guān)鍵字 explicit 防止類型隱式轉(zhuǎn)換
class Fraction { public: explicit Fraction(int num,int den=1); ~Fraction(); operator double() const { return (double)(m_Numerator*1.0 / m_Denominator); } Fraction operator+(const Fraction& f) { return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator, f.m_Denominator * this->m_Denominator); } private: int m_Numerator; int m_Denominator; }; Fraction f(3, 5); Fraction d = f + 4;//報錯:不存在從 "double" 轉(zhuǎn)換到 "Fraction" 的適當構(gòu)造函數(shù) double d = f + 4;//可以,f轉(zhuǎn)換
到此這篇關(guān)于C++ 轉(zhuǎn)換函數(shù)用法案例詳解的文章就介紹到這了,更多相關(guān)C++ 轉(zhuǎn)換函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt6.3 + Clion +MSVC2019環(huán)境配置詳解
本文主要介紹了Qt6.3 + Clion +MSVC2019環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2023-01-01VS2022調(diào)試通過??禂z像頭煙火識別SDK的實現(xiàn)
本文主要介紹了VS2022調(diào)試通過海康攝像頭煙火識別SDK的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02c++ 虛函數(shù)與純虛函數(shù)的區(qū)別(深入分析)
本篇文章是對c++中虛函數(shù)與純虛函數(shù)的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-05-05