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实例指针,函数的行为就是多态。
二进制(binary),发现者莱布尼茨,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。
本小节主要讲解红外接收和遥控器件,以及遥控操作LED。
本小节讲解模拟量传感器使用,旋转电位器,DHT11温湿度传感器和实现自定义传感器类。
本小节讲解Sensor类及派生类、数字量传感器使用和传感器的推荐交互流程。
本小节讲解ESP32内置触摸引脚的用法,
本小节主要介绍按键信号转换、Button类及派生类、和Button交互推荐流程。
本小节主要介绍Ws2812灯珠的使用、对父类进行扩展实现自定义功能,和指针向下强制转换的使用。
本小节主要介绍RGB三色LED的使用,以及多态的具体实现。
ESP32 Arduino Framework是专门针对ESP32开发板的Arduino应用开发框架,为用户开发IOT应用、HMI应用提供一致的开发体验。
ESPConnect是一个基于现代浏览器的管理器,在你需要快速验证、调试、管理文件、检查状态的时候,它能帮你省下大量打开和切换重型工具的时间。
本文介绍两种使用TEA5767收音机模块实现FM收音机的方案,感兴趣的朋友可在此基础上实现更丰富的功能。