Elementinitialisierer
-
"w" ist kein member von Klasse Test. Soviel ich weis kann man nur menber initalisieren ....
Test(int t = 666, int u = 1337, DefKon w) : var(t), var2(u){ w.var =3; }
-
hmmm verwirrend aber ich nur dieses überlfüssiges zuweisen entdeckt:
#include <iostream> using namespace std; class TestVar { public: int var; TestVar(int a = 565) { var = a; cout << var << endl; } }; class Test { private: int var; int var2; TestVar var3; public: Test(int t, int u, TestVar w) : var(t), var2(u), var3(w){ var = t; var2 = u; var3 = w; //cout << w.var << endl; } int Get(){ return var; } int Get2(){ return var2; } }; int main() { Test haha(1,2,3); cin.get(); }ausgabe: 3
wenn ich hier initialisierer
, var3(w)wegmache kommt in der ausgabe:
3
565 <-- das hier ist überflüssiges zuweisen oder?aber bei mir geht es noch darum ab wann ein fehler entsteht wenn kein initialisierer da ist wegen dem Satz "- Klassen, für die kein Default-Konstruktor definiert ist, können nicht als Typ für Teilobjekte verwendet werden. "
-
Dann probier mal das hier
#include <iostream> using namespace std; class TestVar { public: int var; TestVar(int a) //ohne default-Wert { var = a; cout << var << endl; } }; class Test { private: int var; int var2; TestVar var3; public: Test(int t, int u, TestVar w) : var(t), var2(u) //ohne Initialisierung von var3 { var = t; var2 = u; var3 = w; //cout << w.var << endl; } int Get(){ return var; } int Get2(){ return var2; } }; int main() { Test haha(1,2,3); cin.get(); }
-
(D)Evil schrieb:
const-correctnes usw

okay ich schreib nochmal die 3 Gründe ab:
- Ein Teilobjekt wird zunächst mit Default-Werten versehen. Erst anschließend enthält es durch Zuweisungen die richtigen Werte. Diese teilweise überflüssigen Aktionen beeinträchtigen die Performance des Programms.
- Konstante Objekte oder Referenzen können nicht als Teilobjekte deklariert werden, da eine nachträgliche Zuweisung nicht möglich ist.
- Klassen, für die kein Default-Konstruktor definiert ist, können nicht als Typ für Teilobjekte verwendet werden.
Das 1. hab ich so eben entdeckt.
Das 2. hast du diesen Beispiel gezeigt richtig?
Das 3. da brauch ich noch ein Beispiel dafür!!!! Wie reproduziere ich das?
-
Braunstein schrieb:
Dann probier mal das hier
aaah okay!! vielen vielen dank! dann hab ich alles!
-
C++-Lehrling schrieb:
...
...
- Klassen, für die kein Default-Konstruktor definiert ist, können nicht als Typ für Teilobjekte verwendet werden....
Das 3. da brauch ich noch ein Beispiel dafür!!!! Wie reproduziere ich das?EDIT: eigentlich zu spät, aber noch ein anderer Weg für "Teilobjekt":
class A { int x; public: A(int i) : x(i) {} }; // bietet keinen Default-Ctor class B : public A { }; int main(void) { B b; // Krach-die-Wurst !! return 0; }Gruß,
Simon2.
-
auch nochmal danke. Die Beispiele kopier ich alles
-
letzte Frage noch: Elementinitialisierer funktioniert nur bei Konstruktoren richtig?
-
C++-Lehrling schrieb:
letzte Frage noch: Elementinitialisierer funktioniert nur bei Konstruktoren richtig?
Jo, es gibt sie nur da
.
-
Wenn man den Copykonstruktor mit dazu zählt.
