inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 게임 만들기 연습 문제 패키지

2.5 명령 패턴 command pattern

명령 패턴 클래스에 대한 질문

해결된 질문

278

쿠크다스

작성한 질문수 16

1

안녕하세요. 명령 패턴으로 포탄 예제 구현예제에 관해 질문드립니다.

포탄 발사 명령을 구현하기 위해 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 {}
};

OpenGL C++ oop

답변 2

1

홍정모

기모찌님 반갑습니다. 객체지향의 중요한 단계로 들어가고 계시네요. 군더더기 없는 코드를 작성하고 싶으시군요. 좋은 질문입니다. Actor를 GroundActor, TransformingActors, FlyingActors로 더 세분화하는 방법도 있고 순서 가상함수가 아닌 형태로 구현해서 필요없는 자식들은 구현할 필요가 없도록 하는 방법도 있습니다. virtual void fly(){Error if this is not flying actor }.

언리얼 엔진 들여다 보면 클래스도 많고 상속 구조도 꽤 여러 단계가 되기도 합니다. 조금 더 해보시면 감이 오실것 같네요. 좋은 게임 만들어서 보여주세요!

0

쿠크다스

빠른 답변 감사합니다.

혹시 필요한 기능을 자식 클래스에만 정의하고 해당 기능을 호출할 때, 다이나믹 캐스팅(다운 캐스팅)을 사용하는것도 괜찮은 방법이 될까요??

깃허브에서 받은 코드가 왜 강의코드랑 다를까요

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