樓上提到:
public 是is a
private 是 has a
這個提法是OO概念發展的初期的一種認識,有點過于一般化不能更精確的表達出OO中的實際思想;一般現在的OO理論中將這樣的概念稱之為LSP(Liskov Substitution Principle),意思就是從行為上而言子類因該可以完全替換基類完成基類的行為職責。
public關鍵字在C++中僅僅只是一個語法元素,并不能強制使得采用了public繼承的類體系一定滿足LSP,其中還要看看子類在實現基類的接口行為時是否遵從了LSP原則,否則通過public繼承而來的子類仍然不能稱之為其滿足LSP,當然此時可能能夠滿足is a關系。
至于has a關系在OO中應該理解為composite關系,也就是常說的組合關系,在其他的OO語言中(如:Java)composite僅僅能夠通過包含關系來實現,在C++中則多了一種所謂的實現繼承private,這樣看來private僅僅只是一種特定語言的實現手段而已,代表的OO概念沒有區別。
protected在繼承時又應該是什么呢?其實如上面private具有相同的含義,僅僅只是為了方便C++類方法的傳遞調用而設計的,也是一種composite關系而已。
至于virtual繼承關系請參看
http://www.shnenglu.com/chemz/archive/2007/06/12/26135.html