面向對象三大特性(封裝、繼承、多態)在 C++ 中由 class 承載。類設計質量決定系統質量。工業級要求:**二進制兼容**(無需重編譯換庫)與**源碼兼容**(重編譯即可)。
整體功能三原則
- 單一功能原則:一類一責任,過則拆、散則合。
- 開放/封閉原則:對擴展開放、對修改封閉;擴展靠新類(繼承/組合)而非改舊碼。
- 最小驚訝原理:重載/覆寫保持原語義(如
Dog::Talk() 咬人即違反)。
接口與實現隔離具體準則
- 接口最小完整:精簡函數數量、覆蓋職能、保留舊函數(加註釋)、只增不減。
- 成員變量全私有:
public 破壞封裝,protected 導致派生類依賴實現細節。
- 避免返回成員指針/引用:同樣暴露實現。
- 審慎禁用默認拷貝/賦值:若不定義自定義版本,應聲明私有禁用,改提供
clone()。
兼容性硬性規範
- 不變類大小、成員順序:不增減成員、不改類型、不改聲明順序、不改虛函數有無(影響 vptr 存在與佈局)。
- 不用 inline 函數:內聯編譯進客戶碼,訪問私有成員且佈局變則二進制不兼容。
- 接口函數非虛:虛函數調用靠 vtable 偏移,順序變則不兼容。改用 NVI 模式:
public void Draw() { DoDraw(); } private virtual void DoDraw();
- 不改接口函數順序:嵌入式系統常用導出函數表索引調用。
- 避免默認參數:默認值隨頭文件,修改即破壞兼容。
遵循上述,可最大程度保障庫升級不傷客戶代碼,踐行 Intel/Microsoft 式長期兼容承諾。