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