慎重使用Get/Set成員函數(二)Set函數和其他修改函數的替代辦法
黃國強 2011-7-19
前文說到,儘量避免使用Get和Set這樣的函數,下面介紹的是替代辦法。
第一步,把Set中的函數參數都放到構造函數中。
第二步,把所有其他的修改函數都變成不變函數。
比如下面的代碼:
class CSample
{
public:
};
這個Plus函數就是典型的修改函數,需要改成這樣的形式。 CSample Plus(int x)const;上面兩步完成後 ,上次的例子,應該變成這樣:
class CSample
{
...
private:
public:
};
顯然這個CSample類變成了一個值對象。值對象的好處很多,舉一個例子,如果在函數Plus內部出現了異常,可以安全的處理,因爲原先對象並沒有改變。
有的人擔心效率問題,我覺得這是不必要的。現在的PC已經足夠好了,編譯器也足夠的聰明,我們把程序寫對纔是最重要的,性能問題是等到真正出現了,我們再來考慮。