子类调用基类构造函数,然后使用子类Arduino c++中基类的实例方法
Subclass calling Base Class constructor then using instance method of Base Class in Subclass Arduino C++
我有一个基本类FCBRelay
,在该类中,它处理将继电器设置为引脚并保持on
或onForTime
等一般方法。
当我试图在子类内调用onForTime
时,它不会编译给出错误:
cannot call member function 'void FCBRelay::onForTime(int)' without object
现在我明白了错误是什么,因为onForTime
方法不是静态,但我的子类构造函数也调用基类构造函数。这是我的理解。
这样的想法在我的main
函数中更具描述性。与其调用waterPump.onForTime(2);
,不如调用waterPump.squirt(2);
My Classes如下
FCBRelay.h
#ifndef FCBRelay_H
#define FCBRelay_H
#include <Arduino.h>
class FCBRelay {
public:
FCBRelay(int pinNo);
int delayTime;
void tick();
void onForTime(int timeInSeconds);
private:
int _pinNumber;
int _lastTickMillis;
void on();
void off();
};
#endif
FCBRelay.cpp
#include "FCBRelay.h"
FCBRelay::FCBRelay(int pinNo) {
_pinNumber = pinNo;
pinMode(_pinNumber, OUTPUT);
}
void FCBRelay::onForTime(int timeInSeconds) {
delayTime = timeInSeconds * 1000;
on();
}
void FCBRelay::tick() {
unsigned long currentMillis = millis();
if((currentMillis - _lastTickMillis) >= delayTime) {
_lastTickMillis = currentMillis;
off();
}
}
void FCBRelay::on() {
digitalWrite(_pinNumber, HIGH);
}
void FCBRelay::off() {
digitalWrite(_pinNumber, LOW);
}
FCBWaterPump.h
#ifndef FCBWaterPump_H
#define FCBWaterPump_H
#include "FCBRelay.h"
class FCBWaterPump : public FCBRelay {
public:
FCBWaterPump(int pinNo);
void squirt(int timeInSeconds);
};
#endif
FCBWaterPump.cpp
#include "FCBWaterPump.h"
FCBWaterPump::FCBWaterPump(int pinNo) : FCBRelay(pinNo) {
}
void squirt(int timeInSeconds) {
FCBRelay::onForTime(timeInSeconds);
}
您不小心编写了一个独立的函数。这就是为什么没有对象
改变:
void squirt(int timeInSeconds) {
FCBRelay::onForTime(timeInSeconds);
}
:
void FCBWaterPump::squirt(int timeInSeconds) {
// ^^^^^^^^^^^^^^
FCBRelay::onForTime(timeInSeconds);
}
相关文章:
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 如何使基类从子类调用覆盖函数
- 如何调用传递给 JNI 'jobject' 的 Java 对象的子类/子类的方法
- 模型类/子类,其中子类类型在C++中先验未知
- 具有虚拟析构函数的基类子类中的默认析构函数
- 使用默认构造函数的父类;子类的析构函数意外调用
- Qt c++ 类 + 子类使用 Q_OBJECT 不起作用
- 提升 Python 包装的虚拟类 - 子类返回错误:与C++签名不匹配
- 宠物动物园C++/继承类/子类
- C++ 继承基和子类
- 模板基类子类的模板专用化
- 在c++中,如何确定一个类是否是继承链中的最后一个类/子类?它位于基类的另一端
- 如何使用模板类的模板类子类从哈希表实现哈希集