Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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
Předmět Autor Datum
V main máš jen: mravce mr(5); Těch pět mravců :-) bys pak měl nainicializovat, např: for{int j=0;j<5…
krok 16.04.2008 11:23
krok
a nestaci tento konstruktor v mravce.cpp? mal by sa volat automaticky pri definovani, nie? mravce::…
Pavol 16.04.2008 12:04
Pavol
Nijak detailně jsem to nezkoumal. - mravce_d je typu prvok a je inicializován v konstruktoru mravce:…
krok 16.04.2008 15:06
krok
Nie je jednoduché odhaliť logickú chybu, ktorá tam niekde je, pretože ten program je veľmi náročný n…
los 16.04.2008 19:10
los
-mravce odvodená z triedy prvok? ...tazko povedat...v skole sme robili nieco podobne a tak som to aj… poslední
Pavol 17.04.2008 21:14
Pavol

a nestaci tento konstruktor v mravce.cpp? mal by sa volat automaticky pri definovani, nie?

mravce::mravce(int pPoc): pocet_d(pPoc)
{
	mravce_d=new prvok[pPoc];
	int cislo;
	for (int i=0;i<pPoc;i++)
	{
		....{nastavenie hodnot mravce_d[i]}...
	}
}

...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.

Zpět do poradny Odpovědět na původní otázku Nahoru