Dinamikus tömb foglalás c++-ban úgy hogy ne fusson le a default konstruktor?
Objektumoknak akarok egy tömböt foglalni pl
class A {
int num;
Object* array;
};
A::A(int num){
this->array=new A[num];
}
és hogy itt a new-val nehívja meg a default konstruktort?
Amúgy eléggé ki van csavarva ez a kód.
Biztos ezt akartad lekódolni?
na szóval :D
Hogy tudok objektumoknak foglalni dinamikus tömböt úgy hogy ne kapjanak értéket az objektumot.
Szóval van egy osztályom ahol a default konstruktorban be kell kérni 2 számot
class Mobile{
int number; //telefonszam
double data; //internet
Mobile();
};
Mobile::Mobile() {
//bekérem a telefonszamot es az internetet...
}
és van egy másik osztályom PhoneCatalog névvel ahol leszeretnék foglalni egy Mobile tömböt amiben ugye a Mobile objektumokat tárolom.
class PhoneCatalog {
public:
int num;
Mobile* catalog;
};
PhoneCatalog::PhoneCatalog(int num) {
this->catalog = new Mobile[num];
}
És a baj hogy itt mindig meghívja a Mobile default konstruktorát, amit én viszont nem szeretnék szóval hogy csinálom meg hogy ne töltse fel adatokkal a telefont?
Vektort meg ilyeneket még nem tanultunk szóval anélkül.
Oké, előszöris:
Nem tudom hogy a kódod azt cisnálja-e, amit gondolok, hogy cisnál, de mindenesetre leírom, hogy konstruktorba nem rakunk inputkezelést! Sőt, igazából data classba úgy egyáltalán. A Mobile osztályod feladata az adat tárolása, és esetleg transformálása, arra nem kéne megszorítást tartalmaznia, hogy az adatot milyen módon kapja meg. Ezt valamilyen kontroller mechanizmusnak kellene végeznie.
Másodszor, tudtommal nincs olyan, hogy nem hívsz konstruktort. A konstruktornak az a feladata, hogy a példányosítás során lefusson. Tehát olyan nincs, hogy létrehozod az objektumokat, de nem futtatsz rajtuk konstruktort.
Az egyik lehetőséged tehát az, hogy nem hozol létre objektumokat. Erre az egyik megoldás, hogy dinamikusan méretezed a tömböd (esetleg használsz egy erre kitalált container osztályt, mint a vector), és mindig újraméretezed amikor egy objektumot példányosítanál benne. A másik mód pedig az, hogy nem objektumokat, hanem objektum pointereket hozol létre a tömbödben, így szintén akkor példányosítasz egy obejktumot, amikor úgy döntesz.
A másik lehetőséged, ami mondjuk ki, messzemenően egyszerűbb, hogy elfogadod, hogy a konstruktor le fog futni, adsz neki egy üres(?) default konstruktort, és az adatbevitelt getter-setter metódusokkal valósítod meg a példányosítás után. Ezzel a megoldással mi a probléma?
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!