

c++ rada
zdravim, neviem si rady s c++:
mam triedu prvok:
private pozx_d
a public metodu pozx, ktora vrati pozx_d.
z tejto triedy mam potomka:
class mravce:public prvok
{
private:
int pocet_d;
prvok *mravce_d;
public....nejake metody
z triedy prvok mam aj dalsieho potomka:
class nadprvok: public prvok
{
private:
public:
virtual void pohni(int pX, int pY);
void hladaj(mravce *mrav, int *pX, int *pY);...
v triede nadprvok chcem pomocou metody hladaj(v maine ju volam takto: m.hladaj(&mr, &pX,&pY); pricom m je typu nadprvok) najst najblizsi prvok z triedy mravce.
telo hladaj:
void nadprvok::hladaj(mravce *mrav, int *pX,int *pY)
{
int poc=mrav->pocet();
...
int xx;
for (int i=0;i<poc;i++)
{
xx=mrav[i].PozX();
...
}
}
toto: xx=mrav[i].PozX(); - zistil som, ze sa mi tam nedava aktualna pozicia(ale udaj, ktory pouziva konstruktor) i-teho mravca....nevie niekto kde je problem? dakujem.
tu je projekt v ms visual studiu:
rapidshare.com/files/107794035/sem.rar
V main máš jen:
bys pak měl nainicializovat, např:
mravce mr(5);
Těch pět mravců
for{int j=0;j<5;j++)
mr(j) = new mravce(j+1);
A nebo místo mravce mr(5); má být mravce * mr = new mravce(5);
a nestaci tento konstruktor v mravce.cpp? mal by sa volat automaticky pri definovani, nie?
...tak problem nevyrieseni, ale tak metodu na zistenie najblizsieho "mravca" ku "mravenciarovi" dam do triedy mravce a potom to poslem mravenciarovi,aby si upravil kurz pohybu-je to divne(mravce si zistia, ktori je najblizsie a este mu to aj prezradia,...) ale ide to tak a to je hlavne :)
Nijak detailně jsem to nezkoumal.
- mravce_d je typu prvok a je inicializován v konstruktoru mravce::mravce správně
ale v sem.cpp samotná instance typu mravce - tedy mr - neni před prvním použitím inicializovaná.
Nevím o tom, že by se konstruktor volal automaticky, já jsem vždycky používal syntaxi
mravce * xx = new mravce(yy);
xx.pohni();
...
Nie je jednoduché odhaliť logickú chybu, ktorá tam niekde je, pretože ten program je veľmi náročný na pochopenie.
Hlavne, že ti to ide, ale zopár otázok na zamyslenie:
- Prečo je trieda mravce odvodená z triedy prvok? Nezdá sa mi, že by sa to tam niekde využívalo a logicky mi to nedáva zmysel.
- Prečo si si zvolil také divné názvy pre triedy, ako sú prvok, nadprvok a mravce? Logickejšie by bolo mravec namiesto prvok, mravenčiar namiesto nadprvok a zoznam mravcov (std::list<mravec> alebo len obyčajné pole) namiesto špeciálnej triedy mravce.
-mravce odvodená z triedy prvok?
...tazko povedat...v skole sme robili nieco podobne a tak som to aj ja tak spravil-v podstate je to tam asi koli zapuzdreniu-takto ovladam vsetky mravce jednym prikazom z mainu a nemusim ich vsetky osobitne(myslim v cykle for) ovladat v maine.
- k tym nazvom....no najrv som si to skusal a ked som mal toho dost napisaneho, uz sa mi to nechcelo robi odznovu.