명령 패턴 클래스에 대한 질문
안녕하세요. 명령 패턴으로 포탄 예제 구현예제에 관해 질문드립니다.
포탄 발사 명령을 구현하기 위해 Actor 클래스에 순수 가상 fire 함수를 생성하고 MyTank 클래스에서 fire 함수를 오버라이딩해서 구현했습니다.
만약 탱크, 비행기, 로봇 등 다양한 클래스를 구현해야하고, 각각 고유한 기능 구현해야한다면, Actor를 상속 받는 모든 클래스가 불필요한 기능을 모두 구현해야하는데 이런 문제를 해결하는 방법이 있을까요?? (자식 클래스에만 정의하면 base reference or pointer를 통해 호출할수 없는 문제가 있습니다.)
바쁘실텐데 죄송하네요...
class Actor
{
public:
virtual void moveUp(float dt) = 0;
virtual void moveDown(float dt) = 0;
virtual void moveLeft(float dt) = 0;
virtual void moveRight(float dt) = 0;
virtual void fire() = 0; // for tank
virtual void fly() = 0; // for aircraft
virtual void transform() = 0; // for robot
};
class MyTank : public Actor
{
public:
void moveUp(float dt) override {}
void moveDown(float dt) override {}
void moveLeft(float dt) override {}
void moveRight(float dt) override {}
void fire() override {}
void fly() override {}
void transform() override {}
};
class Aircraft: public Actor
{
public:
void moveUp(float dt) override {}
void moveDown(float dt) override {}
void moveLeft(float dt) override {}
void moveRight(float dt) override {}
void fire() override {}
void fly() override {}
void transform() override {}
};
class Robot: public Actor
{
public:
void moveUp(float dt) override {}
void moveDown(float dt) override {}
void moveLeft(float dt) override {}
void moveRight(float dt) override {}
void fire() override {}
void fly() override {}
void transform() override {}
};
답변 2
1
기모찌님 반갑습니다. 객체지향의 중요한 단계로 들어가고 계시네요. 군더더기 없는 코드를 작성하고 싶으시군요. 좋은 질문입니다. Actor를 GroundActor, TransformingActors, FlyingActors로 더 세분화하는 방법도 있고 순서 가상함수가 아닌 형태로 구현해서 필요없는 자식들은 구현할 필요가 없도록 하는 방법도 있습니다. virtual void fly(){Error if this is not flying actor }.
언리얼 엔진 들여다 보면 클래스도 많고 상속 구조도 꽤 여러 단계가 되기도 합니다. 조금 더 해보시면 감이 오실것 같네요. 좋은 게임 만들어서 보여주세요!
깃허브에서 받은 코드가 왜 강의코드랑 다를까요
0
74
1
Mac vscode 으로 시작하시려는 분들께
0
315
1
마우스 좌우 버튼을 동시에 눌렀을 때의 원의 위치
0
427
1
정답은 어디서볼수있나요?
1
347
2
예제코드
1
491
2
따배C++ 몇 강까지 학습한 후 수강가능 할까요?
1
643
1
15:00 부근 질문 있습니다.
0
421
1
(20.4 참고) 20.4에 해당하는 가이드 페이지가 어디있는지 모르겠습니다.
0
372
1
multimap 질문
0
355
2
도형들의 움직임이 너무 빠릅니다...
0
465
1
vcpkg 설치를 했는데
0
683
2
mutiple bullet 관련 질문 드립니다.
0
481
2
실행 후 화면 꺼짐
0
579
2
예제 파일 실행 시, 에러
1
559
1
아직 못풀어도 괜찮을까요?
0
500
1
코드 열었을 때 오류
1
808
3
코딩공부에 대해서 막히는부분
0
336
1
vcpkg 설치 오류
0
594
2
랜덤값 질문입니다.
0
426
1
vcpkg 다운로드에 문제를 겪고있습니다
1
424
1
if 문에 >= 대신 == 넣으면 작동을 하지 않는 이유가 무엇인가요.
0
283
1
multiple bullet 문제
0
317
1
프로그램 실행 순서 질문
0
274
1
2.2.2 상속으로 깔끔하게 init 메서드 질문
0
228
1





