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"引入头文件,才能使用其中的函数。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值