正文
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>
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 };
你想支持有理數(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í)是年輕人改變自己的最好方式