我正在尝试编写一个类来处理操纵杆输入(不相关),并且对继承和 C++ 的新手感到生疏我在尝试创建操纵杆类的子类时遇到了一些困惑。这是我的代码
//superclass's .h
#ifndef JOYSTICKINPUT_H
#define JOYSTICKINPUT_H
#include "WPILib.h"
class JoystickInput {
public:
JoystickInput(Joystick*);
Joystick * joystick;
Victor * myVictor [3];
bool buttons [10];
bool buttonClicked(int id);
void testForActions();
};
#endif
这是它的定义
//superclass's .cpp
#include "JoystickInput.h"
JoystickInput::JoystickInput(Joystick * joy) {
joystick = joy;
for (int x = 0; x < 10; x++) {
buttons[x] = false;
}
}
bool JoystickInput::buttonClicked(int id) {
if (buttons[id] == false and joystick->GetRawButton(id) == true) {
buttons[id] = true;
return true;
} else if (buttons[id] == true and joystick->GetRawButton(id) == false) {
buttons[id] = false;
return false;
} else {
return false;
}
}
void JoystickInput::testForActions() {
}
现在我试图用 JoystickOne 类来扩展它,因为它的行为略有不同。为此,我创建了 JoystickOne.h 和 JoystickOne.cpp
//Joystickone.h
#ifndef JOYSTICKONE_H
#define JOYSTICKONE_H
#include "WPILib.h"
#include "JoystickInput.h"
class JoystickOne : public JoystickInput {
public:
JoystickOne(Joystick*);
Joystick * joystick;
Victor * myVictor;
bool buttons [10];
bool buttonClicked(int id);
void testForActions();
};
#endif
和.cpp
#include "JoystickOne.h"
#include "WPILib.h"
JoystickOne::JoystickOne(Joystick * joy) : JoystickInput(joy) {
//joystick = joy;
//myVictor = new Victor(1);
/*for (int x = 0; x < 10; x++) {
buttons[x] = false;
}*/
}
bool JoystickOne::buttonClicked(int id) {
if (buttons[id] == false and joystick->GetRawButton(id) == true) {
buttons[id] = true;
return true;
} else if (buttons[id] == true and joystick->GetRawButton(id) == false) {
buttons[id] = false;
return false;
} else {
return false;
}
}
void JoystickOne::testForActions() {
if (buttonClicked(1)) {
}
if (buttonClicked(2)) {
}
if (buttonClicked(3)) {
//myVictor->Set(.3);
}
if (buttonClicked(4)) {
}
}
我的问题是我不太确定 JoystickOne 类中有什么无关紧要的东西。我来自 Java,所以我习惯于扩展一个超类并自动使用它的所有方法和成员。由于 C++ 分离为 .h 和 .cpp 文件,我感到很困惑;从我通过弄乱学到的知识中,我必须声明我希望使用的所有变量和方法,即使它们是超类的成员。我不认为我必须定义方法 buttonClicked() 两次,虽然我没有机器人,所以我现在无法实际测试它。
基本上,我在问我可以从 JoystickOne 类的定义中删除什么,以及如何去做。如果你们中的任何人对 C++ 中的一些良好 OOP 实践有任何建议,请随时分享,或者甚至清除我拥有的一些 Java 主义。
谢谢!