Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Initialesirungsliste der normal

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
13.10.2007, 20:45 Uhr
mischa
Fragender


Hallo,
z.B. ich habe eine Klasse

C++:
class A
{
     int a;
     public:
     A(int);
};



Ich kann ja dann im Konstruktor so etwas machen
A(int ai) : a(ai)
{}
oder
A(int ai)
{ a=ai; }

Das Ergebnis ist das selbe a=ai, aber wo ist der wesentliche Unterscied zwischen den beiden Methoden? Oder gibt es Fäle bei denen man unbedingt eins von beiden benutzen muss?
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.10.2007, 21:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
in dem Fall von Basistypen (also int, float, char, usw) ist eigentlich imho kein Unterschied in 2 Varianten.

Wenn du jedoch komplexe Typen (z.b Klassen, o.ä) hast, musst du teilweise sogar erste Variante verwenden, mal davon abgesehen das bei erster Variante der entsprechende Konstruktor des Typs aufgerufen wird, beim 2ten der =operator.

ein Beispiel wo er dir mit 2ter methode nich mal kompiliert

C++:
class A
{
public:
   A(int a);
};

class B
{
public:
   B(A &a) : _a(a) { } // kompiliert, geht auch direkt (impliziter _A(A&)-Kopiekonstruktor)

private:
   A _a;
}



Für


C++:
class B
{
public:
   B(A &a) { _a = a; }
private:
   A _a;
}



kompiliert er nicht, da er keinen Standardkonstruktor von A zur Verfügung hat, sondern nur den mit Parameter, d.h da müsste man zumindest:


C++:
class B
{
public:
   B(A &a) : _a(0) { _a = a; }
private:
   A _a;
}



schreiben, um den A(int)-Konstruktor aufzurufen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.10.2007, 21:12 Uhr
mischa
Fragender


Jetzt ist klar danke.
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.10.2007, 12:36 Uhr
RHBaum



Im Prinzip solltest du immer die Initialisierungsliste benutzen, wenn es geht. Perfromance ist da ein faktor fuer.

Eigentlich brauchst du nur den code im Konstruktur benutzen, wenn dein Element keinen Zuweisungs Op und CCtor unterstuetzt.

Bei allen anderen versionen kannst du soagr complexere Funktionalitaet in ne private statische Memberfunktion auslagern und diese in der Initialisierungsliste benutzen.

Ciao ...
 
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: