Gkar Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 Hallo zusammen, ich hätte zu der folgenden Aufgabe einige Fragen und hoffe das mir jemand helfen kann. Aufgabe: Es soll folgendes ausgegeben werden. Allerdings soll die main() nicht verändert werden: Initialisierung Hello World Ende void main() { cout << "Hello World\n"; } Die Lösung sieht wie folgt aus: struct GlobalBracket { GlobalBracket() {cout <<"Initialisierung\n";} ~GlobalBracket() {cout <<"Ende\n";} } global_bracket_variable; Ich denke ich bin zwar auf der richtigen Spur, aber mir fehlt noch der entscheidende Hinweiß. Bei GlobalBracket() bzw. ~GlobalBracket() müßte es sich doch (laut der Schreibweise) um Konstruktoren/Destruktoren handeln, oder? Allerdings kenne ich diese Befehle eigentlich nur bei Klassen und nicht bei Strukturen. Ich hoffe ich habe mich nicht zu umständlich ausgedrückt. Im voraus schon einmal vielen Dank. Zitieren
Klotzkopp Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 Bei GlobalBracket() bzw. ~GlobalBracket() müßte es sich doch (laut der Schreibweise) um Konstruktoren/Destruktoren handeln, oder?Richtig. Allerdings kenne ich diese Befehle eigentlich nur bei Klassen und nicht bei Strukturen.Der Unterschied zwischen class und struct ist in C++ sehr gering. Bei struct ist der Default-Zugriffsspezifizierer für Member und Vererbung public, bei class private, das ist schon alles. Strukturen in C++ können vererbt werden, Operatoren und virtuelle Methoden haben usw. Zitieren
Gkar Geschrieben 21. Oktober 2008 Autor Geschrieben 21. Oktober 2008 Vielen Dank für die wirklich seeeehr schnelle Antwort. Jetzt ist es mir schon um einiges klarer. Allerdings eine Frage hätte ich noch. Den Begriff GlobalBracket kann ich den gleichsetzen mit dem Zeichen "{"? Was ich damit sagen will ist, ob es sich dabei automatisch um die beiden "äußersten" Klammern handelt? Also die Klammern die meine main() bilden? Zitieren
Klotzkopp Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 Nein, der Name dieser Struktur ist willkürlich, die könnte auch Kaesekuchen oder Boersencrash heißen. Gleiches gilt für den Namen der Instanz (global_bracket_variable). Entscheidend ist, dass eine globale Instanz der Klasse erstellt wird, denn die wird vor main erzeugt, und danach zerstört. Welche Namen die Struktur und die Instanz haben, ist völlig egal. Zitieren
sistemix Geschrieben 24. Oktober 2008 Geschrieben 24. Oktober 2008 Ich hab Strukturen immer nur in Verbindung mit Variablen und nicht mit Funktionen verwendet und ich glaube es ist auch kein guter Stil, wenn man die wie Klassen verwendet oder bin ich da auf dem Holzweg? Zitieren
TDM Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Ich meine mich zu entsinnen, dass im Linuxkernel auch Strukturen mit Funktionspointern verwendet werden. Von daher: Kein schlechter Stil, eher Geschmacksfrage. Zitieren
FinalFantasy Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Ich meine mich zu entsinnen, dass im Linuxkernel auch Strukturen mit Funktionspointern verwendet werden. Funktionspointer sind Membervariablen (nämlich erstmal nur Pointer, egal auf was) in der Struktur oder Klasse. Dabei kommt mir folgende Frage: Der Linux Kernel ist doch in C geschrieben. Kann man denn in C auch schon Methoden in structs einbauen? Also wirklich C, so ganz ohne ++? Ich hab Strukturen immer nur in Verbindung mit Variablen und nicht mit Funktionen verwendet ... Hier sind korrekter ausgedrückt wohl eher Methoden als Funktionen gemeint (eine Funktion hat keine Klasse zu der sie gehört). Ob das dann guter Stil ist, ist wohl wirklich Geschmackssache. Ich verwende es eigentlich selten bis gar nicht. Zitieren
TDM Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Funktionspointer sind Membervariablen (nämlich erstmal nur Pointer, egal auf was) in der Struktur oder Klasse. Dabei kommt mir folgende Frage: Der Linux Kernel ist doch in C geschrieben. Kann man denn in C auch schon Methoden in structs einbauen? Also wirklich C, so ganz ohne ++? Natürlich geht das. Ich schreib meine Treiber auch in (reinem) C und benutze Funktionspointer in Strukturen. Zitieren
Guybrush Threepwood Geschrieben 27. Oktober 2008 Geschrieben 27. Oktober 2008 Kann man denn in C auch schon Methoden in structs einbauen? Also wirklich C, so ganz ohne ++? Nein afaik kann man in C keine Methoden in structs haben. Zitieren
Panke Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Aber Zeiger auf Funktionen. Musst halt das per Hand machen wofür C++ syntaktischen Zucker bietet. Zitieren
Guybrush Threepwood Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Ein Funktionszeiger ist etwas vollkommen anderes als eine Klassenmethode. Zitieren
Panke Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Ich seh da schon parallelen. Einmal verwaltet die Sprache per vtable Methodenzeiger, die ich dann mit syntaktischem Zucker aufrufen kann, das andere mal nehme ich die Verwaltung selber in die Hand. Zitieren
Guybrush Threepwood Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 Natürlich sind da Ähnlichkeiten aber die Unterschiede welche du mit "syntaktischen Zucker" beschreibst sind nicht dadurch behoben das du einen Funktionspointer in die Struktur setzt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.