Kezdőoldal » Számítástechnika » Programozás » Dinamikus tömb foglalás...

Dinamikus tömb foglalás c++-ban úgy hogy ne fusson le a default konstruktor?

Figyelt kérdés

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?


2018. nov. 9. 18:53
 1/6 anonim ***** válasza:
Nem hívja meg.
2018. nov. 9. 19:00
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Amúgy eléggé ki van csavarva ez a kód.

Biztos ezt akartad lekódolni?

2018. nov. 9. 19:01
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

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.

2018. nov. 9. 19:29
 4/6 anonim ***** válasza:

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?

2018. nov. 9. 20:03
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
Használj mallocot, az nem hív konstruktort! :)
2018. nov. 10. 00:50
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
#5 Oké, használ mallocot (bár egy modern C++ köntösben ahol sokkal korszerűbb megoldások is vannak nem tudom miért jó ezt használni), de ezzel még nincs a tömbje létrehozva. Valamikor azt is meg kell tennie, és akkor visszakanyarodtunk az eredeti problémára. A probléma, hogy ő a tömb elemeit egyenként akarja majd inicializálni, és nem egyszerre az összeset. Tehát marad amit mondtam, vagy dinamikus tömbkezelés, vagy nem konstruktorból állítja be az adatokat.
2018. nov. 10. 11:41
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!