溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++各函數(shù)之間的轉(zhuǎn)換方法

發(fā)布時(shí)間:2021-09-13 09:15:51 來源:億速云 閱讀:101 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“C++各函數(shù)之間的轉(zhuǎn)換方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++各函數(shù)之間的轉(zhuǎn)換方法”吧!

1.標(biāo)準(zhǔn)數(shù)據(jù)之間會(huì)進(jìn)行隱式類型安全轉(zhuǎn)換,規(guī)則如下:

C++各函數(shù)之間的轉(zhuǎn)換方法

 在這里主要探討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)換

到此,相信大家對(duì)“C++各函數(shù)之間的轉(zhuǎn)換方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI