나는이 프로젝트에 병사라는 이름의이 클래스를 가지고 있는데, 모든 병사는 반드시 무기를 가져야하며, 무기의 5 가지 유형, 즉 무기 클래스의 모든 클래스를 상속받습니다. 병사 클래스에서 생성자를 만들면 군인이 어떤 종류의 무기를 얻을 수 있습니까? 모든 종류의 무기에 대해 5 가지 구성자를 만들겠다고 생각했지만별로 의미가 없습니다.추상 클래스를 가진 C++ 생성자
-3
A
답변
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
이 [좋은 초보자의 몇 받기를 책] (HTTP ://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) 및 상속 및 * 다형성에 대해 읽어보십시오. –
레퍼런스 또는 포인터 (또는 똑같이)에 의해 'Weapon'을 받아들이고 생성 된 무기를 어떻게 든 등록합니다. 다형성을 찾아 봐. – Peter
@Peter이 병사 (무기 및 무기)를 좋아합니까? – Liana