其實寫乙個類很簡單,但是要寫乙個符合各方面要求的類,卻不是一件容易的事情。下面總結一下需要考慮的一些問題,先把暫時想到的方面記下來,以後想到新的在增加吧。
類的生死和初始化:
1. copy ctor和copy assignment是不是需要private(單例常用),或者是不是要用private繼承來阻止copy行為。
2. dtor是不是需要virtual(防止vptr的開銷)
3. ctor和dtor是不是異常安全。ctor如果出現異常,能否用raii解決。dtor能不能不讓異常外漏。
4. raii資源的copy行為會不會造成不預期的行為(指標為空)。
5. ctor和dtor都不要呼叫虛函式。
介面和實現:
1. 需要純虛,虛,還是不虛函式。需要介面繼承還是實現繼承。
2. 傳引數盡量穿const ref,返回引數盡量別返回ref(防止臨時變數不見了)。
3. 究竟是不是要用成員函式或者友元函式
4. 有異常的地方,是不是異常安全的,資源有沒有得到完全釋放。
5. 不想暴露太多的內容出去,可以用handle class隱藏。
6. 使用編譯時常量(static const)和執行時常量(const)。
7. 防止過多的臨時變數的產生,可以用rvo(return value opt)優化。
8. operator=賦值需要考慮自複製情況和深度複製。返回*this的引用
9. 可以使用operator new和delete來盡量做高效率的分配策略。注意陣列形式的new/delete
10. 注意函式是不是執行緒安全的。
繼承和多型:
1. 是否需要多重繼承,需要虛繼承。
2. 使用父類的指標來操作子類,防止切片的產生。
3. 組合和繼承的取捨。
4. 型別轉換的時候,dynamic cast不過dynamic_cast比typeid效率低。
5. 是否需要做成模板。
6. 除了虛函式,還可以使用其他方式實現動態呼叫。比如nvi(non virtual inte***ce)和策略設計模式。
7. 盡量不要在子類中覆蓋父類的預設引數。
8. private繼承可以造成empty base 空間最優化(ebo)。
暫時想到這麼些了,以後有空再整理。
如何用Javascript寫乙個Class?
記得前面某次面試被問到此問題,一直以來因為對js的不重視 一知半解,所以當時就懵了 最近google了下,找到以下幾種寫class的方式 1 js因為不是oo語言,所以沒有class的概念,都是通過prototype的方式實現的。var namedclass class.create getname...
如何用C 寫乙個簡單的Login視窗
最近,看到網上經常會問如何進行視窗跳轉,大多數的問題都是牽扯到login視窗。其實,在visual studio 6以來,比較正確的做法,是判斷login視窗的返回值,然後決定是否開啟主窗體,那麼在c 中也是一樣的。具體做法如下 首先,建立login視窗,然後新增相應的輸入框和按鈕,設定視窗的acc...
如何用C 寫乙個簡單的Login視窗
看到網上經常會問如何進行視窗跳轉,大多數的問題都是牽扯到 login 視窗。其實,在 visual studio 6 以來,比較正確的做法,是判斷 login 視窗的返回值,然後決定是否開啟主窗體,那麼在 c 中也是一樣的。具體做法如下 首先,建立 login 視窗,然後新增相應的輸入框和按鈕,設定...