Effctive C++ 改善程序與設計的55個具體做法 (第三版) 學習筆記(五)

人生美好

繼續接上一篇:https://blog.csdn.net/weixin_37997214/article/details/106674201

條款23:寧以non-member、non-friend替換member函數

考慮一個類,該類有一個public函數,如果這個函數又調用了該類的private函數,那麼,我們用private封裝的類的封裝性就被“破壞了”(實際上我們總用這種模式,這裏應該考慮設計一下這個類了,肯定是這個類多少有點問題)

衆所周知,一個類的public函數越少,那麼這個類的封裝性就越好,那麼如果我們有這種調用成員函數的需求時,可採用另一種方式。

參考如下代碼

class A
{
   public:
        const int AddFunA(const int a,const int b)
        {
           return PAddFunsA(a,b);
        }
   private:
        const int PAddFunsA(const int a,const int b)
        {
           reutn a+b;
        }
}

(當然程序在此處是多此一舉),但是我們可以看到,其他用戶調用AddFunA,越多的用戶調用這個函數,就有越多的類受這個類影響。一旦這裏我們想要更改,將AddFunA改爲AddFunsA,則會有大量的用戶需要被修改。所以我們最好的方式是不提供這個public函數。

namespace ASpace
{
    class A;
    const int AddFuns(const int a, const int b)
    {
        return A::AddFunA(a,b);
    }
}

上述這種形式就是解決這種問題的途徑。細品一下,這種的好處就是如果ClassA內容爲基礎內容的時候,可以通過這種函數來拼接成各種函數,在不改變該類的情況下,完美的實現一些功能。但是這個例子可能舉得不恰當,我尋思半天也沒尋思出來這有啥用。

條款24:若所有參數皆需要類型轉換,請爲此採用non-member函數

如果你需要爲某個函數的所有參數(包括被this指針所指的那個隱喻參數)進行類型轉換,那麼這個函數必須是個non-member。

PS:這一條基本沒用到過,感覺這之後看着有些喫力。

條款25:考慮寫一個不拋出異常的swap函數。

與模板相關,暫不考慮。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章