Witam,
mam jako zadanie dodatkowe do napisania program Karabin posiadajacy klase nadrzedna Pocisk i 3 dziedzidzace po niej klasy bedace typami pociskow. Kazdy typ pocisku ma wlasne dmg oczywiscie. Napisalem klase magazynek a w niej funkcje ktora zapelnia danym typem pocisku caly magazynek. Kolejna funkcja ma za zadanie sumowanie obrazen dla calego magazynku i na koniec w klasie Karabin wywolac obie te funkcje aby wyswietlil nam sie odglos pocisku + suma zadanych obrazen.
Probowalem jak moglem i dostalem drobne wskazowki od wykladowcy ale stanalem wlasnie na tej jednej funkcji zwracajacej sume dmg.
Oto fragment kodu:
Tutaj klasa nadrzedna i jedna klasa podrzedna.
class Pocisk{
public:
virtual float dmg()=0;
virtual void animacja_strzalu()
{
cout<<"Pif - Paf !!!";
}
protected:
virtual ~Pocisk(){};
};
class Odlamkowy: public Pocisk{
protected:
void animacja_strzalu()
{
cout<<"BooM !!!\n";
}
float dmg()
{
return 7.4;
}
};
A to klasa magazynek
class Magazynek{
Pocisk *ammo_dmg;
Pocisk *amunicja[30];
float suma=0;
float obrazenia=0.0;
public:
void zapelnij_magazynek(int rodzaj_pocisku)
{
if (rodzaj_pocisku==1)
{
for(int i=0;i<30;i++)
{
amunicja[i]=new Odlamkowy;
}
}
if (rodzaj_pocisku==2)
{
for(int i=0;i<30;i++)
{
amunicja[i]=new Zapalajacy;
}
}
if (rodzaj_pocisku==3)
{
for(int i=0;i<30;i++)
{
amunicja[i]=new Smugowy;
}
}
}
float suma_obrazen_pelnego_magazynka(int rodzaj_pocisku)
{
if (rodzaj_pocisku==1)
{
ammo_dmg=new Odlamkowy;
obrazenia=(*ammo_dmg).dmg();
suma=obrazenia*30;
(*ammo_dmg).animacja_strzalu();
}
if (rodzaj_pocisku==2)
{
ammo_dmg=new Zapalajacy;
obrazenia=(*ammo_dmg).dmg();
suma=obrazenia*30;
(*ammo_dmg).animacja_strzalu();
}
if (rodzaj_pocisku==3)
{
ammo_dmg=new Smugowy;
obrazenia=(*ammo_dmg).dmg();
suma=obrazenia*30;
(*ammo_dmg).animacja_strzalu();
}
return suma;
}
};
Funkcja sumujaca tak wyglada na chwile obecna, tak wiem jest bez sensu. Problem w tym ze po prostu nie mam zadnego pomyslu jak zsumowac w niej te obrazenia bez ponownego pisania ifow (z tego co wiem te ify maja byc robione tylko i wylacznie raz przy tworzeniu obiektow i jako funkcja virtualna).
Czy ktos moglby pomoc mi z ta funkcja? Bede naprawde wdzieczny.
satirevsatirev