Ahoj potrebuju poradit.
Mam ruzne tridy, napr. kruznice, obdelnik, usecka, bod. Potrebuju temito tridami naplnit zasobnik. Nevi nekdo jak na to?
Predm diky
Zalezi asi co s nima chces (predpokladam, ze mluvime o objektech a ne tridach). Pokud chces implementovat nejaky svuj vlastni zasobnik, tak toho najdes na netu tuny. Pokud se bavime o zasobniku procesu (ohranicenem registry EBP a ESP), tak tam by mohlo stacit je vytvorit jako lokalni promenne (bez operatoru new).
#5 Tom
Mam ruzne tridy, napr. kruznice, obdelnik, usecka, bod. Potrebuju temito tridami naplnit zasobnik. Nevi nekdo jak na to?
A ty mu na to povies ze ma pouzit lokalne premenne :)
Samozrejme lokalne premenne sa ukladaju na programovom zasobniku, ale pochybujem ze mu to pomoze s jeho/jej problemom...
#6 vitamin
Dobre, dobre, evidentne jsem nepochopil dotaz....a stale bohuzel tapu. Ja to pochopil tak, ze ma uz napsane nejake tridy Kruznice, Obdelnik, atp. a ted potrebuje dostat jejich objekty na stack. Pravda....duvod jsem uplne nepochopil, ale treba slo o cast nejakeho zadani ve skole, kde probiraji rozdil mezi heapem a stackem....Co ja vim. Vstecka koule je zrovna rozbita :(
#6 vitamin
...a jako dodatek bych doplnil, ze mi ten muj nesouvisly zvast o tom, jak se plni zasobnik vecma, prisel poucnejsi nez KIIVova puvodni odpoved slozena z jedineho slova "polymorfizmus" (editu jsem si vsiml, az po odeslani sveho prispevku....nicmene stejne...).
#8 Tom
V tomto pripade si myslim ze to jedno slovo "polymorfizmus" bude pre tazatela velmi poucne a zrejme mu pomoze viac ako pochopenie ako funguje programovy stack Tak ci tak bude asi musiet googlit.
Ja by som to vyriesil tak, ze by som vytvoril abstraktnu bazovu triedu ktoru by dedili vsetky tie geometricke utvary a do stacku by som vkladal pointre na tu bazovu triedu.
Tak nám řekni v čem to píšeš a potom budeme chytřejší.
Pokud je to v C++, máš vyhráno. Použiješ obecnou třídu "obrazec" a od ní budou zděděny třídy "bod", "obdélník" .. ( pro další info bych tě odkázal na nějaký článek o OOP v C++ ..
Pokud to bude v C tak bych zapátral nad konstrukcí "void *p;" tak se dá v C dělat jakž takž obecný ukazatel na cokoli.
Tom, co ti mam na to říct .. nezazářil jsi :D
#10 TheOndrap
Ze zkušenosti doporučuji v C používat strukturu s jedním enum a unionem - udělá program mnohem přehlednějším (vyhneš se dynamickému alokování u každé položky - což je pro začátečníka obvzlášť přínosné). Samozřejmě je ideální pokud mají položky podobnou velikost, jinak je to plýtvání pamětí.
Ale jelikož tazatel zmiňuje třídy, tak dělá v C++ a můj příspěvek pro něj není příliš přínosný.
takto dopadá, když se autor neumí pořádně vyjádřit... ale z 90% myslí C++
jinak použij polymorfismus, jak tu bylo několikrát uvedeno
Ja vim, ze budu opet pranyrovan, ale jste si jisti, ze autor prispevku potrebuje poradit s tim, jak vytvorit/navrhnout tridy Obdelnik, Kruznice, whatever? Mne se podle dotazu spis zda, ze tyto tridy uz ma navrzene/objekty vytvorene, ale potreboval by nejak pomoct s jejich pushnutim do zasobniku (at uz mysli jakykoliv). Polymorfismus (jak navrhoval KIIV) resi navrh trid...muj prispevek zase zasobnik (ac ne moc podrobne, pac nevim, jaky zasobnik mel autor na mysli).
má na mysli normální zásobník napr. stack<T> nebo vlastní třídu stylem pole (push/pop) a do toho chce vložit tyto objekty... tohle musí resit pres polymorfismus, pokud neví co to je, tak google a naucit se zaklady OOP
ty Tome, ale mě přijde, že vůbec nechápeš co chce a píšeš mimo téma stále, u toho tvého prvního příspěvku jsem si tady nahlas ríkal "WTF" :)
Jinak jedno možné řešení...
#include <iostream>
#include <stack>
using namespace std;
class Base {
public:
// pouze pro ukazku kvuli polymorfismu
virtual void something() = 0;
};
class Kruh : public Base {
public:
int mKruh;
Kruh() : mKruh(10) { }
virtual void something() { }
};
class Ctverec : public Base {
public:
int mCtverec;
Ctverec() : mCtverec(20) { }
virtual void something() { }
};
int main()
{
stack<Base*> prvky;
prvky.push(&Kruh());
prvky.push(&Ctverec());
Ctverec* c = (Ctverec*)prvky.top(); prvky.pop();
Kruh* k = (Kruh*)prvky.top(); prvky.pop();
cout << "Kruh: " << k->mKruh << ", Ctverec: " << c->mCtverec;
cin.get();
return 0;
}
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku