C++ 轉(zhuǎn)換函數(shù)用法案例詳解
1.標(biāo)準(zhǔn)數(shù)據(jù)之間會(huì)進(jìn)行隱式類型安全轉(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)用+運(yùn)算符函數(shù),4會(huì)轉(zhuǎn)為Fraction(4,1),含有接受一個(gè)參數(shù)的構(gòu)造函數(shù),否則也無法轉(zhuǎn)換
3.同時(shí)含有轉(zhuǎn)換函數(shù)和可以隱式的調(diào)用構(gòu)造函數(shù)(轉(zhuǎn)換構(gòu)造參數(shù))會(huì)報(bào)錯(cuò)
class Fraction
{
public:
/*
轉(zhuǎn)換構(gòu)造函數(shù):
-有僅有一個(gè)參數(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;
};
報(bào)錯(cuò): “Fraction::operator +”: 2 個(gè)重載有相似的轉(zhuǎn)換 ,
所以在我們寫構(gòu)造函數(shù)都會(huì)使用關(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;//報(bào)錯(cuò):不存在從 "double" 轉(zhuǎn)換到 "Fraction" 的適當(dāng)構(gòu)造函數(shù)
double d = f + 4;//可以,f轉(zhuǎn)換
到此這篇關(guān)于C++ 轉(zhuǎn)換函數(shù)用法案例詳解的文章就介紹到這了,更多相關(guān)C++ 轉(zhuǎn)換函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(26.有序數(shù)組中去除重復(fù)項(xiàng))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(26.有序數(shù)組中去除重復(fù)項(xiàng)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++基礎(chǔ)學(xué)習(xí)之利用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
這篇文章主要給大家介紹了關(guān)于C++基礎(chǔ)學(xué)習(xí)之利用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
c語言讀取obj文件轉(zhuǎn)換數(shù)據(jù)的小例子
c語言讀取obj文件轉(zhuǎn)換數(shù)據(jù)的小例子,需要的朋友可以參考一下2013-03-03
Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
C++之實(shí)現(xiàn)快速清空vector以及釋放vector內(nèi)存
這篇文章主要介紹了C++之實(shí)現(xiàn)快速清空vector以及釋放vector內(nèi)存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

