Hirdetés

Új hozzászólás Aktív témák

  • modder

    aktív tag

    válasz Blaise7 #1146 üzenetére

    Helló, természetesen igen, de nem pontosan abban a formában, ahogy leírtad.

    Heterogén kollekciónak hívják, és a lényeg, hogy bármilyen osztály objektumait beleteheted, amik a kollekció típusának leszármazottai.

    Legyen

    class Os {};
    class Gyerek: public Os {};

    Os* tomb[10];

    Ahogy látod Os* (azaz Os-re mutato pointer) típusokat tárolok a tombben, és ha hozzá akarok adni egy elemet, akkor a címét kell hozzáadni:
    Os[0] = new Gyerek;
    vagy

    Gyerek gyerek;
    Os[1] = &gyerek;

    Ez az egyetlen módja, hogy egy tömbben gyerek osztályokat is tudj tárolni. Az oka az, hogy a két osztály memóriatérképe eltérő. Amíg Os-ben lehet pl. 1db int, addig Gyerekben legyen 10db float, plusz az Os 1db intje.
    Ha Os tipusu tombot inicializálsz, akkor a memóriában (a te esetedben) 10db Os osztály méretű hely foglalódna a memóriában, ami a fentiekből adódóan 10 * 1db int-et jelentene.
    Erre a helyre nyilván nem férne bele a 10 * (10db float + 1db int), ami a gyerek osztály mérete.

    Az egyetlen módszer, hogy pointer tömböt inicializálsz, mert egy pointer egy int méretű, és bármilyen memóriacímre mutathat.

    Remélem érthető voltam, keress rá a C++ heterogén kollekcióra.

    [ Szerkesztve ]

Új hozzászólás Aktív témák