조이스틱 입력 (관련 없음)을 처리하는 클래스를 코딩하려고하는데, 상속에 녹슬고 C++에 새로운 것입니다. 조이스틱 클래스의 하위 클래스를 만들 때 혼란을 겪고 있습니다. 그 동작은 약간 다릅니다 여기 여기 내 코드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 클래스와이를 확장하기 위해 노력하고있어. 이를 위해 나는
#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 클래스의 외부 무엇을 확신 아니에요이다 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를 만들었습니다. Java에서 왔기 때문에 수퍼 클래스를 확장하고 모든 메소드와 멤버를 자동으로 사용할 수있었습니다. 저는 C++이 .h와 .cpp 파일들로 분리되어 있기 때문에 혼란 스럽습니다. 내가 주변에서 어지럽 혀서 배운 것을 보면, 비록 그들이 수퍼 클래스의 멤버 일지라도 사용하고자하는 모든 변수와 메소드를 선언해야합니다. 저는 buttonClicked() 메서드를 두 번 정의해야한다고 생각하지 않습니다. 로봇을 가지고 있지 않아도 실제로 테스트 할 수는 없습니다.
기본적으로 JoystickOne 클래스의 정의와 그 작업 방법을 생략 할 수 있습니다. C++의 좋은 OOP 프랙티스에 대해 조언을 구하십시오. 공유하고 싶거나 java-isms를 정리할 수도 있습니다.
감사합니다.
하위 클래스의 수퍼 클래스 멤버를 다시 선언 할 필요는 없습니다. 'protected' 키워드를 사용하여 슈퍼 클래스와 그 자식 사이에 공유하고자하는 모든 멤버를 선언하십시오. 덮어 쓰기를 원하는 메소드는 수퍼 클래스에서'virtual'으로 표시되어야합니다. 그리고 그게 다야. 그 상속과는 별개로 C++과 java에서 꽤 똑같습니다. – Greg0ry
C++에서 상속에 관한 간단한 튜토리얼을 살펴 보는 것이 유용 할 것 같네요 .--) 이건 어때요? : http://www.cplusplus.com/doc/tutorial/classes/ – Greg0ry
'내가 배운 것에서 주위를 어지럽 혀서 내가 사용하고자하는 모든 변수와 메소드를 선언해야한다. 비록 그들이 슈퍼 클래스'Nope의 멤버 일지라도. –