Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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?

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.

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?

Ich meine mich zu entsinnen, dass im Linuxkernel auch Strukturen mit Funktionspointern verwendet werden.

Von daher: Kein schlechter Stil, eher Geschmacksfrage.

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.

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.

Aber Zeiger auf Funktionen. Musst halt das per Hand machen wofür C++ syntaktischen Zucker bietet.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.