Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Frage zu Konstruktor     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
ctor
Unregistrierter




Beitrag ctor Unregistrierter 21:17:05 29.06.2012   Titel:   Frage zu Konstruktor            Zitieren

Hallo, ich versuche gerade ein Beispiel aus einem Buch von Stroustrup zu verstehen, einfachheits halber habe ich das Beispiel gekürtzt.

Meine Fragen:
Wieso wird am Anfang: const Date& default_date() aufgerufen? Müsste da nicht eigentlich
C++:
Date::Date() : y( default_date() . year() )
aufgerufen werden?

Wenn ich
C++:
const Date& default_date()
aus dem Code rausnehmen und z.b.schreibe:
C++:
Date::Date() : y( 8 )
dann wird
C++:
Date::Date()
auch zu erst aufgerufen.

Oh, jetzt seh ich glaub ich gerade meinen Denkfehler:

C++:
 Date::Date() : y( default_date() . year()
wird anscheind wohl auch zu erst aufgerufen doch bevor ich meine Ausgabe
C++:
cout<<"third"<<endl;
sehe kann wird im Konstruktor ja die Funktion
C++:
const Date& default_date()
aufgerufen sehe ich das richtig?


C++:
Date::Date() :
     y( default_date() . year() )


Und mit .year(); sage ich an dieser Stelle das ich die Funktion year(); direkt im Konstruktor Code aufrufen will? Stimmt das so?

Im Buch ist diese Stelle leider nur sehr kurz beschrieben, ich weiss nicht ob der Herr Stroustrup ein paar Kapitel weiter dieses Programm nochmal genauer erklärt, daher würde ich es jetzt gerne verstehen.


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <fstream>
#include <string>
#include <vector.h>
 
 
using namespace std;
 
 
class Date {
public:
 
    Date();
    Date(int yy );
 
    int   year()  const { return y; }
 
// private:
    int   y;
 
 
 
};
 
//------------------------------------------------------------------------------
 
 
const Date& default_date()
{
    cout<<"first"<<endl;
 
    static const Date dd(2001 );
   
    return dd;
}
 
 
//------------------------------------------------------------------------------
 
 
Date::Date() :
     y( default_date() . year() )  // .year() bedeutet das die Funktion im Konstruktur Code
                                  // aufgerufen werden soll?
{   cout<<"third"<<endl;    }
 
 
 
 
//------------------------------------------------------------------------------
 
Date::Date(int yy ) :
     y(yy)  
{
    cout<<"second" <<endl;
}
 
 
//------------------------------------------------------------------------------
 
int main()
{
 
Date ff;  // Kein Parameter, übergeben erster Aufruf also: const Date& default_date();
 
cout<<"ff: " << ff.y << endl;
cout<<"year: " << ff.year() << endl;
 
   //   vector<Date> birthdays(4);
  //    cout<< birthdays[0].year() << endl;
  //    cout<<birthdays[0]. y << endl;
 
 
 
    system("PAUSE");
    return 0;
}
 
//------------------------------------------------------------------------------
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 2588
Beitrag Th69 Mitglied 09:16:57 30.06.2012   Titel:              Zitieren

Hallo,

ja, das hast du wohl richtig verstanden. Zuerst wird bei einem Konstruktor die Initialisierungsliste abgearbeitet (und dort dann evtl. auch Funktionen aufgerufen). Und danach wird dann erst der Block des Konstruktors verarbeitet.
c++.de :: C++ (auch C++0x und C++11) ::  Frage zu Konstruktor   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.