人生美好
繼續接上一篇: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函數。
與模板相關,暫不考慮。