復合方式(composition)和 private繼承, 都能表示, 根據某個類實現出新的類的形式, 即通過使用protected成員, 和重寫virtual函數.
優先選擇復合方式. 原因:
1. 復合方式, 可以實現重寫virtual函數, 然後阻止派生類重新定義virtual函數;
2. 可以使Widget的編譯依存度降至最低, 即只包含類的聲明式(復合), 而避免包含基類的頭文件(繼承);
例外: private繼承, 可以使EBO(空白基類最優化), 在某些空白基類的情況下很重要, 不過很少出現. 所以優先復合.