2017-12-30 80 views
-3

나는이 프로젝트에 병사라는 이름의이 클래스를 가지고 있는데, 모든 병사는 반드시 무기를 가져야하며, 무기의 5 가지 유형, 즉 무기 클래스의 모든 클래스를 상속받습니다. 병사 클래스에서 생성자를 만들면 군인이 어떤 종류의 무기를 얻을 수 있습니까? 모든 종류의 무기에 대해 5 가지 구성자를 만들겠다고 생각했지만별로 의미가 없습니다.추상 클래스를 가진 C++ 생성자

+4

이 [좋은 초보자의 몇 받기를 책] (HTTP ://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) 및 상속 및 * 다형성에 대해 읽어보십시오. –

+0

레퍼런스 또는 포인터 (또는 똑같이)에 의해 'Weapon'을 받아들이고 생성 된 무기를 어떻게 든 등록합니다. 다형성을 찾아 봐. – Peter

+0

@Peter이 병사 (무기 및 무기)를 좋아합니까? – Liana

답변

0

무기가 모든 무기의 기본 클래스라고합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다, 당신은 무기 * 물체를 잡고 삭제 RAII 또는 smart_pointers을 고려할 것 리얼 워드 코드에서

class Weapon { virtual void shot() = 0; } 

class Gun : public Weapon { virtual void shot() { cout << "Gun"; } 


class Knife : public Weapon { virtual void shot() { cout << "Knife"; } 

class Soldier { 
    Weapon *weapon; 
    public: 
    Soldier() : weapon(nullptr) {} 
    Soldier(Weapon* w) : weapon(w) {} 
    void SetWeapon(Weapon* w) { weapon = w; } 
    Weapon* GetWeapon() { return weapon; } 
} 

: 당신이이 무기 종류 총과 칼을 말해봐. 당신의 군인 클래스에

-2

당신이 할 수있는 작업은 다음과 같습니다

#include "weapon.h" 

class Soldier { 
    Weapon *weapon; 
public: 
    Soldier(Weapon *weapon) { 
     this->weapon = weapon; 
    } 
}; 

당신이 클래스 군인 실체화하려고 할 때는 :

Weapon *w1 = new Knife(), *w2 = new M1(); 
Soldier s1(w1), s2(w2); 
+0

제발 내 대답에 투표를하지 않으려는 경우, 이유를 설명하는 설명을 남겨주십시오. 사람들이 내 대답에 투표를하지 않기 때문에 나는 이해할 수 없다. – kato2