2.ESP8266-类的继承以及头文件的编写

ESP8266面向对象编程之类的继承以及头文件的编写

一、类的继承

class Led       // 通常建立一个类,第一个字母大写
{
    
    
    public:
        Led();  // 构造函数没有返回类型,且与类名完全相同,在对象建立的时候执行
        Led(int ledPin);  // 构造函数没有返回类型,且与类名完全相同,在对象建立的时候执行
        ~Led(); // 析构函数,在对象被删除之前被执行
        void on();
        void off();
        int getledPin();
        void setledPin(int ledPin);
    private:
        int ledPin = 2;
};              // 在class后面必须有一个分号,表示这个类结束了

class PwmLed : public Led   
{
    
    
    public:
        void on(int userPwmVal);    // 函数重载
        int getPwmVal();
    private:
        int pwmVal = 0;

};

上面代码中,已经先有了类Led,然后通过代码class PwmLed : public Led 创建了一个子类PwmLed继承自类Led,Led类称为PwmLed类的父类,PwmLed为Led类的子类。
其中子类会继承到父类的所有的公有变量以及公有方法,当子类中的方法名和父类中的方法名相同时,则子类中的方法称之为函数的重载。通过子类实例化的一个对象去调用函数on的时候,是执行的子类重载后的函数on(),如果子类中不存在函数on()即没有被重载的时候,则调用的是父类的on()函数。

二、头文件的编写

创建一的文件名为Led.h,存放类的声明

#ifndef __LED_H
#define __LED_H

#include "arduino.h"

class Led       // 通常建立一个类,第一个字母大写
{
    
    
    public:
        Led();  // 构造函数没有返回类型,且与类名完全相同,在对象建立的时候执行
        Led(int ledPin);  // 构造函数没有返回类型,且与类名完全相同,在对象建立的时候执行
        ~Led(); // 析构函数,在对象被删除之前被执行
        void on();
        void off();
        int getledPin();
        void setledPin(int ledPin);
    private:
        int ledPin = 2;
};              // 在class后面必须有一个分号,表示这个类结束了

class PwmLed : public Led   
{
    
    
    public:
        void on(int userPwmVal);    // 函数重载
        int getPwmVal();
    private:
        int pwmVal = 0;

};

#endif

创建一的文件名为Led.cpp,存放类的具体的函数的实现

#include "Led.h"

Led::Led()      // ::表示Led()这个函数是属于Led这个类的
{
    
    
    Serial.println("Led Object Created");
    pinMode(ledPin, OUTPUT);
}

// 给变量赋值的方法1:
// Led::Led(int ledPin)      // ::表示Led()这个函数是属于Led这个类的
// {
    
    
//     this->ledPin = ledPin;
//     Serial.println("Led Object Created");
//     pinMode(ledPin, OUTPUT);
// }

// 给变量赋值的方法2:
Led::Led(int ledPin) : ledPin(ledPin)      // ::表示Led()这个函数是属于Led这个类的
{
    
    
    Serial.println("Led Object Created");
    pinMode(ledPin, OUTPUT);
}

Led::~Led() // ::
{
    
    
    Serial.println("Led Object Deleted");
}

void Led::on()
{
    
    
    digitalWrite(ledPin,LOW);
}

void Led::off()
{
    
    
    digitalWrite(ledPin,HIGH);
}

int Led::getledPin()
{
    
    
    return ledPin;
}

void Led::setledPin(int ledPin)
{
    
    
    this->ledPin = ledPin;
    pinMode(ledPin, OUTPUT);
}

void PwmLed::on(int userPwmVal)
{
    
    
    pwmVal = userPwmVal;
    analogWrite(getledPin(),pwmVal);
}

int PwmLed::getPwmVal()
{
    
    
    return pwmVal;
}

在主程序.ino文件中,需要通过#include "Led.h"引入头文件,才能使用其中的函数。

猜你喜欢

转载自blog.csdn.net/qq_43715171/article/details/112570857