Initialisierung eines Arrays
-
Hallo,
man kann ja Arrays mit geschweiften Klammern initialisieren.
Ich möchte gerne eine Referenz auf ein anderes (Senf-)Objekt mit "reinreichen":class Bockwurst { public: Bockwurst( bool &mit_senf ) : has_senf(mit_senf) {}; protected: bool &has_senf; }; int main() { bool master_senf; Bockwurst a[2] = { master_senf, master_senf }; Bockwurst b[2] = { Bockwurst(master_senf), Bockwurst(master_senf) }; Bockwurst *c = new Bockwurst( master_senf ); // Bockwurst *d = new Bockwurst[2]; // wie initialisieren??? }Jetzt sollten alle Würste auf den Master-Senf verweisen.
Die ersten drei Beispiele scheinen zu funktionieren. Im vierten Fall, weiß ich nicht, wie ich es schreiben kann. Ich kann Arrays oder Zeiger auf Bockwürste initialisieren, nicht aber einen Bockwurstarray-Zeiger?Das würde mich mal interessieren...
Danke,
Stimpleton
-
Bockwurst *p[2]; p[0]= new bockwurst(); p[1]= new bockwurst();
-
Sowas ist von der Sprache nicht vorgesehen worden - new[] initialisiert die Array-Elemente immer mit dem Default-Konstruktor (wenn der nicht existiert, gibt das einen Fehler). Als Alternative könntest du die dynamischen Daten in einem vector<> unterbringen (aber dazu brauchst du einen funktionsfähige Copy-Ctor und Zuweisungsoperator) oder das dynamische Array von Hand per Placement new füllen:
//Achtung - Nutzung auf eigene Gefahr: char* bwdata=new char[2*sizeof(Bockwurst)]; Bockwurst* d=(Bockwurst*)bwdata; for(int i=0;i<2;++i) new(d+i)Bockwurst(master_Senf); ... for(int i=1;i>=0;--i) d[i].~Bockwurst(); delete[]bwdata;PS: Über den Sinn der Klasse äußere ich mich mal nicht.
-
Vielen Dank!
@BorisDieKlinge:
Also das Array von Bockwurst-Zeigern hätte tatsächlich (als Workaround) für mein Problem gereicht.@CStoll
Aha! Da habe ich doch gleich wieder eine Menge über "new" gelernt ... Klasse!PS: Über den Sinn der Klasse äußere ich mich mal nicht.
Der ergibt sich erst im Zusammenhang mit "class Wuerstchenbude"...

-
stimpleton schrieb:
PS: Über den Sinn der Klasse äußere ich mich mal nicht.
Der ergibt sich erst im Zusammenhang mit "class Wuerstchenbude"...

Und du willst wirklich jedem Käufer, der jemals bei dir war, nachträglich noch eine Portion Senf auf die Wurst packen können? Also ich würde dir die Wurst noch posthum in den Allerwertesten stecken für so eine Aktion.