PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Frage zu Variablen im Header und Verwendung in der Implementierung


minos5000
2008-06-17, 13:22:46
Hi,

ich soll gerade eine Anwendung für Symbian C++ schreiben habe aber bisher nur rudimentäre Erfahrung in C++. Bisher habe ich hauptsächlich mit Java gearbeitet. Beim Sichten von Beispielcode ist mir etwas aufgefallen bezüglich der Verwendung von Variablen die in der Header-Datei deklariert wurden.

Und zwar werden diese in einem Beispiel über Vererbungssyntax an den Konstruktor gehängt:

Header:

...
private:
InfoType iPhoneInfoType;
TInt iState; // State of the active object
CTelephony* iTelephony;

CTelephony::TPhoneIdV1 iPhoneId;
CTelephony::TSubscriberIdV1 iSubscriberId;
CTelephony::TNetworkInfoV1 iNetworkInfo;

CActiveSchedulerWait iActiveSchedulerWait;
TBuf<CTelephony::KPhoneSerialNumberSize>iIMEI;
TBuf<CTelephony::KIMSISize>iIMSI;
TUint iCellId;
TUint iLocationAreaCode;
};


Implementierung:

...
CSystemManager::CSystemManager() : CActive(EPriorityHigh), iPhoneInfoType(EHandsetIMEI), iState(EStart), iTelephony(NULL), iIMEI(0), iIMSI(0)
{

}
...


Aber in einem anderen Beispiel kommen nicht alle im Header deklarierten Variablen beim Konstruktor vor.

Header:

class CNetworkInfo : public CActive
{
...

private:
CTelephony* iTelephony;
CTelephony::TNetworkInfoV1 iNwInfo;
CTelephony::TNetworkInfoV1Pckg iNwInfoPckg;
MNetworkInfoObserver* iObserver;
};


Implementierung:

...
CNetworkInfo::CNetworkInfo() : CActive(EPriorityStandard), iNwInfoPckg(iNwInfo)
{
CActiveScheduler::Add(this);
}
...



Meine Frage ist nun, welche Bewandnis es damit hat, dass überhaupt Variablen beim Konstruktor auf diese Art und Weise angehängt werden und wie es möglich ist, dass in dem anderen Beispiel teilweise darauf verzichtet werden kann.
Ich habe diesbezüglich auch schon in ein paar C++ Büchern nachgeschlagen, aber keine passende Antwort gefunden.


vg
minos

del_4901
2008-06-17, 13:47:51
Das macht man damit der Default Konstruktor nicht aufgerufen wird, denn sonst ist das doppelt gemoppelt. Außerdem kann man z.B mit const deklarierte Variblen nur so inizialisieren. Und jeh nachdem ob und wie du den gleich Operator überladen hast, kann es sein das du diesen gar nicht explizit aufrufen möchtest.

DocEW
2008-06-17, 14:08:22
Um es nochmal ganz deutlich zu sagen: Das hat trotz der Syntax nichts mit Vererbung zu tun. Es handelt sich um eine Variableninitialisierung (durch Konstruktoraufrufe)! :)

minos5000
2008-06-17, 14:40:42
Dank euch für die Antworten, jetzt blick ich durch :)