【C++】Item34.区分接口继承和实现继承

时间:2021-07-12 10:08:01

区分接口继承和实现继承

类包含的成员函数种类

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
    }    
};