ジョイスティック入力を処理するクラスをコーディングしようとしています (関係ありません)。継承が錆びていて、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() を 2 回定義する必要はないと思いますが、ロボットを持っていないため、実際にテストすることはできません。
基本的には、JoystickOne クラスの定義から切り出せるものと、その方法を尋ねています。C++ での優れた OOP プラクティスについてアドバイスをお持ちの方がいらっしゃいましたら、お気軽に共有してください。または、私が持っている Java 主義を解消することもできます。
ありがとう!