楼上提到:
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.cppblog.com/chemz/archive/2007/06/12/26135.html