[ Príspevkov: 7 ] 
AutorSpráva
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
NapísalOffline : 02.10.2012 0:15 | vector polymorfizus c++

mám 2 rôzne typy objetov. oba sú odvodené od základnej triedy. mám vektor plný pointerov na základnú triedu a vytvoril som dynamicky objekty rôznych typov. Ukazovatele na tie 2 rôzne typy sú uložené vo vektore. Ako s tým teraz pracovať? všetko mi to vyhadzuje errory.
Kód:
std::vector<Shape*> db;
db.push_back(new Kruh());
db.push_back(new Stvorec());

v zakladnej triede Shape aj v odvodených triedach mam virtualne metody ShowAll() na vypis dat. zložiek
db[0].ShowAll(); //nefunguje, chcem aby pracovala presne ta metoda pre Kruh

    std::vector<Shape*>::iterator it;
    for(it = db.begin(); it != db.end(); ++it) //to isté len to chcem v cykle
        *it->ShowAll();  //chcem aby pracovala presne tá metóda pre ten typ objektu samozrejme


nie je nejake elegantnejšie riešenie?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 02.10.2012 0:37 | vector polymorfizus c++

Trochu málo kódu na určenie problému. V prvom rade zle pracuješ s operátormi . a ->. Vector (db) je vlastníkom typu, ktorý mu tam dáš - v tomto prípade Shape* (ukazateľ na Shape). Tým pádom s jednotlivými pravkami musíš pracovať ako s ukazateľom.
Preto toto: dv[0].ShowAll() a *it->ShowAll() je úplne chybne.

Problém môže byť ale aj inde - máš správne oddedené triedy? Je metóda ShowAll() pure virtual?
Plus, ja keď pracujem s vektorom, radšej s tým pracujem ako s poľom a iterátory nepoužívam - je to jednoduchšie a prehľadnejšie (Zdôrazňujem S VEKTOROM)


Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Napísal autor témyOffline : 02.10.2012 8:16 | vector polymorfizus c++

metóda ShowAll nie je pure virtual, je iba virtual. v tych oddedenych triedach potom pracuje takto void Kruh::ShowAll() const { cout << "Kruh"; Shape::ShowAll(); } keby bola pure tak by som to takto nemohol spravit.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 02.10.2012 8:21 | vector polymorfizus c++

Hej pardon, na to zabudni, ani neviem prečo som to napísal. Ostatné platí.


Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Napísal autor témyOffline : 02.10.2012 9:16 | vector polymorfizus c++

chcem dosiahnuť toto:
Kód:
Shape *db[3];  //pole ukazovatelov Shape*
db[0] = new Kruh();
db[1] = new Stvorec();
db[2] = new Trojuholnik();

for(int i = 0; i<sizeof(db)/sizeof(db[0]); i++)
     db[i]->ShowAll();    //funguje presne ako ma, volaju sa funkcie pre Kruh, Stvorec, Trojuh definovane v tych oddedenych triedach


Lenže ja neviem velkost pola dopredu, potrebujem pridavať prvky neobmedzene a odoberať tiež, takže chcem použiť kontajner vector, ktorý toto dokáže a postará sa o celú pamať za mňa. Lenže nedokážem s vectorom ani vypísať prvky.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 02.10.2012 9:41 | vector polymorfizus c++

Čo som písal na konci prvej odpovede? Vector má preťažený operátor prístupu k prvkom [], takže sa s ním dá pracovať ako s poľom.
Urob to isté, čo robíš tu s poľom. Rozdiel je len v tom, že pridávaš a odoberáš prvky pomocou jeho metód.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Napísal autor témyOffline : 02.10.2012 9:50 | vector polymorfizus c++

ok, diki, funguje to dobre.
Kód:
for(int i = 0; i < db.size(); i++)
        db[i]->ShowAll();


 [ Príspevkov: 7 ] 


vector polymorfizus c++



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Dany vector

v Grafické programy

7

608

30.10.2008 10:52

dadmtb

V tomto fóre nie sú ďalšie neprečítané témy.

case Fractal Design Vector RS

v Výhodné ponuky

11

685

30.12.2019 19:41

werwest

V tomto fóre nie sú ďalšie neprečítané témy.

ocz vector 128gb čítanie áno, zápis nie, formátovanie, firmware

v SSD disky

8

584

27.07.2016 20:40

garbage

V tomto fóre nie sú ďalšie neprečítané témy.

P: extra HDD vaničky pre Fractal Define R6 a Vector RS

v Bazár

3

298

16.02.2024 10:59

DropaDred

V tomto fóre nie sú ďalšie neprečítané témy.

Mám sa učiť C ++/objective C/ C#?

v Backend

5

848

08.07.2014 20:40

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Bazár

0

522

13.05.2014 18:16

expresado

V tomto fóre nie sú ďalšie neprečítané témy.

Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka a dopyt práce

0

1580

10.05.2016 14:59

evolvsys

V tomto fóre nie sú ďalšie neprečítané témy.

rozdiel medzi Borland 3.1 C++ vs Net. C++

v Backend

4

662

20.07.2010 12:54

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Hladam hracov na C&C Generals Zero Hour

v Hry a herné konzoly

10

1359

07.03.2007 19:22

Spirit

V tomto fóre nie sú ďalšie neprečítané témy.

Naučte se C++ za 21 dní + C++Builder 6

v Backend

18

2568

21.05.2010 21:08

Wpegb

V tomto fóre nie sú ďalšie neprečítané témy.

Čo mi treba na programovanie v C/C++

v Backend

17

1290

25.09.2011 18:14

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

aky je rozdiel medzi C++ a Visual C++ ?

v Backend

8

2088

19.02.2011 22:46

vendo2

V tomto fóre nie sú ďalšie neprečítané témy.

Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android)

v Bazár

0

548

01.04.2019 11:20

tomasteicher

V tomto fóre nie sú ďalšie neprečítané témy.

Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017

v Ponuka a dopyt práce

1

659

24.10.2016 15:28

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

C&C Generals : Zero Hour - turnaj

v Hry a herné konzoly

0

912

25.02.2009 20:18

k0t0l

V tomto fóre nie sú ďalšie neprečítané témy.

C# alebo C++ appka/program na výpočty

v Backend

1

482

20.03.2015 22:36

walther



© 2005 - 2026 PCforum, edited by JanoF