区分接口继承和实现继承
身为class 设计者,有时候你会希望derived classes只继承成员函数的接口(也 就是声明) ;有时候你又会希望derived classes 同时继承函数的接口和实现,但又 希望能够覆写(override) 它们所继承的实现;又有时候你希望derived classes同时继承函数的接口和实现,并且不允许覆写任何东西。
为了更好地感觉上述选择之间的差异,让我们考虑一个展现绘图程序中各种几何形状的class继承体系:
class Shape {
public:
virtual void draw() const = 0;
virtual void error (const std: :string& msg);
int objectID( ) const;
};
class Rectangle: public Shape {
..