ESP32上的面向对象(2)

继承

继承机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)。

类的权限

一共有3种访问权限,分别是public、private和protected。

1
2
3
4
5
6
7
8
9
10
11
12
13
class DevBoard {
public:
int flash;
DevBoard() {
flash = 1024;
ram = 256;
cpuCore = 1;
};
private:
int ram;
protected:
int cpuCore;
};

可以对这三种控制权限总结如下表:

访问权限 public protected private
对本类 可见 可见 可见
对子类 可见 可见 不可见
对外部调用方 可见 不可见 不可见

继承的格式

1
class 新类的名字:继承方式 继承类的名字{};

以上面的 DevBoard 为例:

1
2
3
4
5
class ESP32Board : public DevBoard {
public:
private:
protected:
};

ESP32Board 是新类的名字,public 是继承方式,DevBoard 是要继承的类。其中,DevBoard被称为基类,ESP32Board被称为派生类

继承后的权限

继承后的子类访问权限如下表所示:

类成员/继承方式 public继承 protected继承 private继承
基类public成员 派生类的public成员 派生类的protected成员 派生类的private成员
基类protected成员 派生类的protected成员 派生类的protected成员 派生类的private成员
基类private成员 派生类中不可见 派生类中不可见 派生类中不可见

继承的构造函数

调用顺序:

  • 子类对象在构造时,首先调用父类的构造函数再调用子类的构造函数。
  • 当父类的构造函数中有参数时,必须在子类的初始化列表中显示调用
  • 子类析构时首先调用子类析构,再调用父类析构函数
  • 子类的成员变量和父类的成员变量同名时, 子类的同名变量会屏蔽父类的。但在子类中仍可使用父类名::使用父类的同名成员
    示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class DevBoard{
    public:
    DevBoard(int flash_p,int ram_p){
    _flash = flash_p;
    _ram = ram_p;
    }
    ~DevBoard(){
    }
    private:
    int _flash;
    int _ram;
    protected:
    };

    class ESP32 : public DevBoard{
    public:
    ESP32(String wifi_p, int flash_p,int ram_p) : DevBoard(flash_p,ram_p){
    _wifi = wifi_p;
    }
    ~ESP32(){
    }
    private:
    String _wifi;
    protected:
    };

    void setup()
    {
    ESP32 esp32("5GHz",2048,256);
    }