Како да забележам кога треба да употребам чисто виртуелни односно виртуелни функции? еве на пример во конкретнава задача што ми укажува на тоа дека и virtual int getenergija(){return energija;} треба да биде виртуелна?
class heroj
{
protected:
char ime[20];
int energija;
int moknost;
int nivo;
public:
heroj (){strcpy(ime, 0); energija=0; moknost=0; nivo=0;}
heroj (char *a, int x, int y, int z)
{
strcpy(ime, a);
energija=x; moknost=y; nivo=z;
}
heroj (heroj &x)
{
strcpy(ime, x.ime);
energija = x.energija; moknost=x.moknost; nivo=x.moknost;
}
virtual int getenergija(){return energija;}
virtual int ostetuvanje();
};
class agilenheroj: public heroj
{
protected:
int agilnost;
public:
agilenheroj(){strcpy(ime, 0); energija=0; moknost=0; nivo=0; agilnost=0;}
agilenheroj(char *a, int x, int y, int z, int t)
{
{strcpy(ime, a); energija=x; moknost=y; nivo=z; agilnost=t;}
}
agilenheroj(agilenheroj &x)
{
strcpy(ime, x.ime);
energija = x.energija; moknost=x.moknost; nivo=x.moknost; agilnost=x.agilnost;
}
friend ostream &operator<<(ostream &out, agilenheroj &x)
{
out<<"Ime:"<<x.ime<<"\nEnergija:"<<x.energija<<"\nMoknost:"<<x.moknost<<"\nNivo:"<<x.nivo<<"\nAgilnost:"<<x.agilnost<<"\n";
return out;
}
agilenheroj operator++()
{
nivo++; energija+=10; moknost+=5; agilnost++;
return (*this);
}
int ostetuvanje(){return 2*agilnost+moknost;}
int getenergija(){return energija;}
};
class intelegentenheroj: public heroj
{
protected:
int intelegencija;
public:
intelegentenheroj(){strcpy(ime, 0); energija=0; moknost=0; nivo=0; intelegencija=0;}
intelegentenheroj(char *a, int x, int y, int z, int t)
{
{strcpy(ime, a); energija=x; moknost=y; nivo=z; intelegencija=t;}
}
intelegentenheroj(intelegentenheroj &x)
{
strcpy(ime, x.ime);
energija = x.energija; moknost=x.moknost; nivo=x.moknost; intelegencija=x.intelegencija;
}
friend ostream &operator<<(ostream &out, intelegentenheroj &x)
{
out<<"Ime:"<<x.ime<<"\nEnergija"<<x.energija<<"\nMoknost:"<<x.moknost<<"\nNivo"<<x.nivo<<"\nIntelegencija:"<<x.intelegencija<<"\n";
return out;
}
int getenergija(){return energija;}
intelegentenheroj operator++()
{
nivo++; energija+=10; moknost+=5; intelegencija++;
return (*this);
}
int ostetuvanje(){return 2*intelegencija+moknost;}
};
class silenheroj: public heroj
{
protected:
int sila;
public:
silenheroj(){strcpy(ime, 0); energija=0; moknost=0; nivo=0; sila=0;}
silenheroj(char *a, int x, int y, int z, int t)
{
{strcpy(ime, a); energija=x; moknost=y; nivo=z; sila=t;}
}
silenheroj(silenheroj &x)
{
strcpy(ime, x.ime);
energija = x.energija; moknost=x.moknost; nivo=x.moknost; sila=x.sila;
}
friend ostream &operator<<(ostream &out, silenheroj &x)
{
out<<"Ime:"<<x.ime<<"\nEnergija"<<x.energija<<"\nMoknost:"<<x.moknost<<"\nNivo"<<x.nivo<<"\nSila:"<<x.sila<<"\n";
return out;
}
int getenergija(){return energija;}
silenheroj operator++()
{
nivo++; energija+=10; moknost+=5; sila++;
return (*this);
}
int ostetuvanje(){return 2*sila+moknost;}};
heroj *bitka(heroj *x, heroj *y)
{
if (x->ostetuvanje()>y->ostetuvanje()) return x;
else if (y->ostetuvanje()>x->ostetuvanje()) return y;
else if (x->getenergija()>y->getenergija()) return x;
else return y;
}
void najsilen(heroj **x, int n)
{
int max=0;
for (int i=1; i<n; i++)
if ((*x).ostetuvanje()<(*x)[i-1].ostetuvanje()) {max=i;}
cout<<"Najsilen e herojot so broj : "<<max<<"\n";
}