Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konstruktion in anderer Klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.11.2008, 21:13 Uhr
~DerHugo
Gast


Hallo Leute

ich möchte euch eine Frage stellen zu einem Problem auf das ich nun schon ein paarmal gestoßen bin. Es geht darum, von zwei eigenen Klassen die eine als Member der anderen zu verwenden, sie aber erst im fremden Konstruktor zu konstruieren. Als Veranschaulichung ein Minimalbeispiel:


C++:
struct A {
    A() {}
    A(int size) {
        field = new int [size];
    }
    ~A() {
        delete [] field;
    }
    int * field;
};

struct B {
    B(int size) {
        // allocate a's field here, with size 'size'
    }
    A a;
};

int main() {
    B b(10);
    return 0;
}


Ich möchte also nun b.a konstruieren abhängig vom c'tor-Parameter von B, d.h. b.a.field eine Grösse von 10 geben. Man könnte natürlich einfach eine init-Methode (oder den operator() oder irgendwas von der Art) in A implementieren, die anstelle des c'tors den Job erledigt, und der im c'tor von B aufgerufen wird, aber das will ich nicht, denn A wird auch in einem anderen Kontext verwendet, wo nur der Konstruktor A's Speicher allozieren können soll. Wie also kann ich B entscheiden lassen, wie viel Speicher für A.field alloziert werden soll?

Vielen Dank für eure Hilfe!

DerHugo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.11.2008, 21:49 Uhr
ao

(Operator)


Dafür gibts die sogenannte "Initialisierungsliste" (auf Englisch "initialization list"). Zwischen Konstruktor-Kopf und Konstruktor-Body werden die Basisklassen und Member einer Klasse initialisiert, so wie hier:


C++:
struct B {
    B(int size)
    : a (size)   // Initialisierungsliste initialisiert Member a
    {

    }
    A a;
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.11.2008, 22:50 Uhr
~DerHugo
Gast


Aaaaah, ich wußte doch, dass das einfach zu realisieren sein muss. Besten Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: