公有继承public的概念,可以分为两部分:函数接口继承和函数实现继承。
在public继承下,派生类总会继承基类的接口。也就是成员函数的接口总是会被继承。
pure virtual纯虚函数只具体指定接口继承。
impure virtual(非纯)函数具体指定接口继承及缺省实现继承。
non-virtual(普通)函数具体指定接口继承及强制性实现继承。
例子1:一考虑一个展现绘图程序中各种几何形状的class继承体系。用来说明纯虚函数只具体指定接口继承。
class Shape{
public:
virtual void draw() const = 0;
virtual void error(const std::string& msg);
int objectID() const;
};
class Rectangle: public Shape{...};
class Ellipse: public Shape{...};
Shape是一个抽象类,它的纯虚函数draw使它成为一个抽象类。所以不能够创建Shape类的实体,只能创建其派生类的实体。
SHape影响了所有以public形式继承它的派生类。因为public继承意味着派生类是基类的一种关系。对基类为真的任何事情一定也对其派生类为真。
如果某个函数可施行于某类身上,也一定可以施行于其派生类身上。所以在public继承下,派生类总是继承基类的接口。成员函数的接口总是会被继承。
在Shape类中,目前声明了三种形式的成员函数,且都是public成员函数。
第一种形式:纯虚成员函数pure virtual
class Shape{
public:
virtual void draw() c