2013-08-18 4 views
2

나는 게임을 만들고있어. 나는 4 개의 적 유형을 가질 계획이다. 나는 이미 그들 중 한 명을위한 수업을 만들었습니다.다형성 C++에서이 클래스를 구현하려면 어떻게해야합니까?

나는 C에 새로 온 ++와 나는 항상 다형성 언제 어떻게 그것을 사용하는 방법에 대해 혼란스러워했다.

은 내가 적의 모든 클래스 4의 거점 역할을하는 클래스를 만들 수있는 방법을 알 필요가있다.

나는 OOP를 사용하여, 장점 중 하나가 적은 코드가 효율적 의미하는 사용되는 것을 알고있다. 저는 정말로 당신이 나를 위해서 전체 클래스를 코딩 할 것을 요구하지 않고 단지이 상황에서 어떻게 다형성을 사용할 수 있을지를 묻습니다. 여기에 4 개의 적 클래스 중 1 개가 있습니다. (다형성이 없으면 모두 똑같이 나타납니다. 변경되는 유일한 것은 chanceOfLoss 변수입니다). 다음

class Punk 
{ 
    public: 
     Punk(Player player) 
     { 
      chanceOfLoss = 50; 
      this->player = player; 
     } 
     bool Fight() 
     { 
      chanceOfWin = chanceOfLoss + player.GetWeapon(); 
      randNum = 1 + rand() % 100; 

      if (randNum <= chanceOfWin) 
      { 
       return true; 
      } 
      return false; 
     } 
    private: 
     Player player; 
     int chanceOfLoss; 
     int randNum; 
     int chanceOfWin; 
}; 
+9

를 공유, 당신은 유형 계층을 사용할 수 없습니다. 적 유형이 다르게 행동하면 유형 계층 구조를 사용하십시오. – nosid

+0

nosid 주석에 공감 :이 경우에는 상속을 사용하지 말고'chanceOfLoss'에 setter와 getter를 추가하십시오. – Synxis

+0

여기 핵심 OOP 원칙을 혼동스럽게 생각한다고 생각합니다. [다형성 (Polymorphism)] C++에서 [1]은 구현보다는 추상화를 프로그래밍 할 수있는 기능을 제공합니다. [상속] [2]는 여러 클래스에 공통된 기능을 작성할 수있는 기능을 제공합니다. 다음 질문 [link] [3]을 참조하십시오. [1] : http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming [2] : http://en.wikipedia.org/wiki/Inheritance_%28object-oriented_programming%29 [3] : http://stackoverflow.com/questions/10973949/difference-between-inheritance-and-polymorphism –

답변

2

이 상황에서 다형성을 사용하는 방법의 예입니다. 모든 디자인 고려 사항에 따라 최상의 선택인지 고려해야합니다.

class BaseEnemy은 원수의 기본 클래스 될 것입니다. 각각의 적 유형은 그걸 상속 받아 getChanceofLoss 메소드를 오버라이드합니다. 다른 적 유형은 chanceOfLoss``의 값이 다른 경우 모든 원수 같은 Fight 방법을

class BaseEnemy 
{ 
public: 
    bool Fight() 
    { 
     chanceOfWin = getChanceOfLoss() + player.GetWeapon(); 
     ... 
    } 
    virtual int getChanceOfLoss() = 0; 
} 

class Punk: public BaseEnemy 
{ 
public: 
    virtual int getChanceOfLoss() { return 60; }  
} 
+0

이것은 우수합니다. 나는 그것을 이해한다. Base 클래스의 가상 메서드는 derrived 클래스의 메서드에 의해 재정의되어야하며 해당하는 chanceOfLoss 값을 반환합니다. 고마워요. –

+0

왜 downvote ?? – Itsik

+0

내가 downvote didnt, 나는 위쪽 화살표를 눌러 봤지만 그것은 15 명의 담당자가 필요하고 결과적으로 비 가상 소멸자에 대해 1 –

관련 문제