Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Reihenfolge bei der Objekterstellung

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 ] > 2 <
010
14.08.2005, 11:25 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Reiko:
Eine Frage noch mal zur Klasse oben.

Gegebenen Konstruktoren:

C++:
X(const X& arg);
X();
X(int a)




C++:
obj1;

X(obj1);  // Zeile 1
X(12);    // Zeile 2
X();       // Zeile 3



Zeile 1 + 2 führen zur Objekterstellung, Zeile 1 nicht. Wieso?
Danke

Also X(obj1); ist gleichbedeutend mit "X obj1", dh. die Klammern sind redundant und werden fortgelassen. X(12); sowie X() erzeugen anonyme Objekte, sind also ctor Aufrufe wie man sie kennt, aber das erzeugte Objekt hat keinen namen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.08.2005, 15:54 Uhr
Reiko



Oben hab ich die Zeilen verwechselt etc, also nochmal.

X(obj1); ergibt bei Visual C++ 6.0 einen Fehler: "neu definition", wobei "obj1" ein bereits vorher definiertes Objekt ist. Wovon soll es denn eine "neu definition" sein?
X(obj1); ist ja der Copy-ctor X(const X& arg);

Und vor allem ist es so, dass man alle möglichen Konstruktoren alternativ folgendermaßen
so schreiben kann:
X::ctor (Aufrufe mit "Klassenbezug", z.b: X::X(12); )
ctor (Aufrufe ohne einen Bezug, z.b: X(12); )

Beide erstellen ja ein anonymes Objekt, aber beim Copy-ctor funktioniert nur die erste Schreibweise. Darum gehts mir.

X::X(obj1); // wird korrekt kompiliert; hier würde also das anonym erzeugte Objekt mit dem Inhalt des bereits vohandenen Objekts "obj1" überschrieben werden
X(obj1); // wird nicht kompiliert

Dieser Post wurde am 14.08.2005 um 15:57 Uhr von Reiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
14.08.2005, 15:58 Uhr
virtual
Sexiest Bit alive
(Operator)


[quote Reiko]Oben hab ich die Zeilen verwechselt etc, also nochmal.

X(obj1); ergibt bei Visual C++ 6.0 einen Fehler: "neu definition", wobei "obj1" ein bereits vorher definiertes Objekt ist. Wovon soll es denn eine "neu definition" sein?
X(obj1); ist ja der Copy-ctor X(const X& arg);
[/qoute]

Nein, nochmal:

C++:
X(obj1);


als eigenständige Zeile ist eine Definition, identisch mit:

C++:
X obj1;
// oder
X (((((obj1)))));


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
14.08.2005, 16:24 Uhr
Reiko



Naja, egal: Mal angenommen, es sei wirklich eine Definition, dann müßte der Compiler den Code übersetzen. Tur er aber nicht - also ist was mit der Zeile.
Kannste ja mal durch 'n Compiler jagen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
14.08.2005, 17:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, wenn Du obj1 bereits davor definiert hast, gehts nicht durch den Kompiler, logisch.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: