class Animal {
public:
// 构造函数
Animal(const std::string& nickname) : nickname_(nickname) { }
// 让类外部可以访问到nickname_
const std::string& nickname() const { return nickname_; }
// 行为1:喂食
virtual bool Feed(const std::string& food) {
return false;
}
// 行为2:叫唤
virtual void Shout() {
}
protected:
// 数据
const std::string nickname_; // 昵称
private:
}; 在声明体内,可以定义方法和数据,一般将数据放在private和protected下,以达到封装数据的目地。
class Dog : public Animal {
public:
Dog(std::string& nickname) : Animal(nickname) { }
bool Feed(const std::string& food) override {
if (food == "骨头") {
Serial.printf("%s:吃了一根骨头。\n", nickname_.c_str());
return true;
}
return false;
}
void Shout() override {
Serial.printf("%s:汪~汪~汪~。\n", nickname_.c_str());
}
// 看门
void WatchDoor() {
}
} 类Dog继承类Animal,然后重写了Feed和Shout方法(加override修饰),使用代码:
class Cat : public Animal {
public:
Cat(std::string& nickname) : Animal(nickname) { }
bool Feed(const std::string& food) override {
if (food == "鱼") {
Serial.printf("%s:吃了一条鱼。\n", nickname_.c_str());
return true;
}
Serial.printf("%s:猫要吃鱼。\n", nickname_.c_str());
return false;
}
void Shout() override {
Serial.printf("%s:喵~喵~喵~。\n", nickname_.c_str());
}
// 抓鱼
void CatchFish() {
}
} 多态实现代码:
void feed(Animal *animal) {
animal->Feed("骨头");
} 当调用feed函数时,传入Dog实例指针和Cat实例指针,函数的行为就是多态。
PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。
在ESP32的开发,经常会有系统崩溃一直重启的情况,那么如何快速定位出现异常的代码呢?
本节主要讲解FreeRTOS任务间如何使用消息队列、事件组和二进制信号量进行通信。
本节主要讲解Task类,FreeRTOS多任务的使用。
本节主要讲解Timer类,FreeRTOS定时器的使用。
本节主要讲解舵机驱动类和用按键控制舵机。
本节主要讲解执行器件类型和用按键控制继电器。
本小节主要讲解红外接收和遥控器件,以及遥控操作LED。
本小节讲解模拟量传感器使用,旋转电位器,DHT11温湿度传感器和实现自定义传感器类。
本小节讲解Sensor类及派生类、数字量传感器使用和传感器的推荐交互流程。
本小节讲解ESP32内置触摸引脚的用法,