Hogyan tudok létrehozni egy olyan tömböt C++-ban, ami egy absztrakt osztályra mutató pointereket tartalmaz?
Azért nem sikerül mert ugye absztrakt osztályt tilos példányosítani. Az absztrakt osztályom neve: Eloleny. Két leszármaztatott osztály: Allat, Noveny. A létrehozott (absztrakt osztályra mutató pointereket tartalmazó) tömbbe ezekre a leszármaztatott osztályokra mutató pointereket fogom beletenni.
így próbáltam: Eloleny *allatok= new Eloleny;
Hibaüzenet: cannot instantiate abstract class
1. Nem jó megoldás:
Eloleny* allatok = new Eloleny;
Ugyebár absztrakt osztályt nem lehet példányosítani, ahogy te is írtad. Itt pedig pont ezt teszed. Annyi különbséggel, hogy a heap-ben foglalsz neki helyet.
2. Helyes megoldás:
Te valami ilyesmit akartál szerintem:
Eloleny** allatok new Eloleny*[100];
Ebben az esetben lesz egy memória rész ahol 100 darab mutató van, amik Eloleny-ből származó objektumokra mutatnak.
3. Jó megoldás:
Én a helyedben nem találnám fel a spanyol viaszt. Használj inkább STL vektort:
std::vector<Eloleny*> allatok;
A konstruktor hívásra viszont vigyáznod kell, minden törlésnél meg kell hívnod a delete operátort az adott mutatóra.
4. Haladó megoldás:
Hogy ne kelljen minden törlés mozgatás és egyéb esetet lekezelned és hogy tuti memory leak mentes legyen az életed, használt smart pointereket. Így minden objektumod destruktora meghívódik ha elfogynak a hivatkozások.
std::vector<std::shared_ptr<Eloleny>> allatok;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!