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