区分接口继承和实现继承
类包含的成员函数种类
1.静态函数
2.非静态函数
2.1 普通函数(非虚) non-virtual
2.2 虚函数
2.2.1 纯虚函数 pure-virtual
2.2.2 非纯虚函数 impure-virtual
一、接口继承
继承类必须要实现声明为pure-virtual的函数,意味每个继承类的特异化实现
二、实现继承
继承类如有需要可以覆写(override)基类的impure-virtual函数,当不覆写时将使用基类提供的默认实现
三、普通非虚函数
继承类不应声明实现此类函数,否则该继承类将隐藏基类的实现。此类函数的意义就是强制所有继承类都使用基类的实现。
例子: 绘图类结构中, Shape作为抽象基类。
#pragma once #include <string> class Shape { public: virtual ~Shape(){} virtual void Draw() = 0; virtual void Error(const std::string& msg); int ObjectId() const; protected: private: }; class Rectangle : public Shape { public: void Draw() { //draw rectangle } void Error(const std::string& msg)override { //... } }; class Circle : public Shape { public: void Draw() { //draw circle } };