Array und Default Constructor
-
Hallo
Annahme, eine Klasse A hat einen privaten Default-Konstruktor, der auch
nicht aufgerufen werden soll. Stattdessen gibt es einen mit Argument 'int x':class A { public: A::A(int x); private: A::A(); } class B { public: B::B(int x,int y,int z); private A array[3]; } B::B(int x,int y,int z) { array[0]=A(x); array[1]=A(y); array[2]=A(z); }Da Array-Elemente nicht in der Initialisierungsliste des Konstruktors von B
vorkommen dürfen, kann ich array[0],array[1],array[2] erst im Body des
Konstruktors zuweisen. Der Compiler beschwert sich natürlich, daß der Default-
Konstruktor von A privat ist. Wie geht man da vor?Fällt mir bloß ein, einen vector<A> zu nehmen und im Konstruktor von B mit
push_back() zu arbeiten, aber gibts da auch eine syntaktisch richtige Lösung
für Arrays?Danke,lg
-
Das geht nicht. Umgehe das Problem indem du keine Arrays benutzt:
-
Was gehen würde, wäre einen Defaultparameter zu verwenden.
#include <iostream> using namespace std; class A { public: A::A(int = 0); }; class B { public: B::B(int x,int y,int z); private: A array[3]; }; A::A(int x) { } B::B(int x,int y,int z) { array[0]=A(x); array[1]=A(y); array[2]=A(z); } int main() { }[ EDIT ] Sollten Defaultparameter lieber im Prototyp oder bei der Definition angegeben werden ?
-
SeppJ schrieb:
...indem du keine Arrays benutzt:
Habe dazu gerade mal eine allgemeine Frage.
Sollte man einen Vektor immer einem Array vorziehen, auch bei z.B. so etwas: ?int ar[4] = {}
-
"Immer" ist ein starkes Wort. Was soll man darauf anderes Antworten als "Nein"?
Gerade Vector und Array sind nicht 100% äquivalent, der vector entspricht ja einem Zeiger auf ein Array auf dem Heap, während das Array sowohl auf dem Heap als auch auf dem Stack liegen kann. Bei Arrays die man auf den Stack legen würde, sollte man eher eine kleine Kapselklasse mit einem statischen Arraymember benutzen, z.B. boost::array.