正文

回到頂部

1. 將需要隱式類型轉(zhuǎn)換的函數(shù)聲明為成員函數(shù)會(huì)出現(xiàn)問(wèn)題

使類支持隱式轉(zhuǎn)換是一個(gè)壞的想法。當(dāng)然也有例外的情況,最常見(jiàn)的一個(gè)例子就是數(shù)值類型。舉個(gè)例子,如果你設(shè)計(jì)一個(gè)表示有理數(shù)的類,允許從整型到有理數(shù)的隱式轉(zhuǎn)換應(yīng)該是合理的。在C++內(nèi)建類型中,從int轉(zhuǎn)換到double也是再合理不過(guò)的了(比從double轉(zhuǎn)換到int更加合理)??聪旅娴睦樱?/p>

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 1 class Rational { 2  3 public: 4  5 Rational(int numerator = 0, // ctor is deliberately not explicit; 6  7 int denominator = 1); // allows implicit int-to-Rational 8  9 // conversions10 11 int numerator() const; // accessors for numerator and12 13 int denominator() const; // denominator — see Item 2214 15 private:16 17 ...18 19 };

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開(kāi)發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

 

你想支持有理數(shù)的算術(shù)運(yùn)算,比如加法,乘法等等,但是你不知道是通過(guò)成員函數(shù)還是非成員函數(shù),或者非成員友元函數(shù)來(lái)實(shí)現(xiàn)。你的直覺(jué)會(huì)告訴你當(dāng)你猶豫不決的時(shí)候,你應(yīng)該使用面向?qū)ο蟮奶匦浴S欣頂?shù)的乘積和有理數(shù)類相關(guān),所有將有理數(shù)的operator*實(shí)現(xiàn)放在Rationl類中看上去是很自然的事。但違反直覺(jué)的是,Item 23已經(jīng)論證過(guò)了將函數(shù)放在類中的方法有時(shí)候會(huì)違背面向?qū)ο蠓▌t,現(xiàn)在我們將其放到一邊,研究一下將operator*實(shí)現(xiàn)為成員函數(shù)的做法:

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式