C++ Klassenzugriff mit Pointer

JavaBeginner

Ensign
Registriert
Juli 2015
Beiträge
142
Hallo, ich hätte da mal eine Frage. Wie muss ich die folgende Klasse umändern um über einen Pointer einen neue "Sternschnuppe" zu definieren.
Code:
class Sternschnuppe {
public:
    Sternschnuppe (std::string n) 
    {
        Sternschnuppenname = n;
        North = this;
        South = this;
        East = this;
        West = this;
    };

    static std::string sternnename;
    Sternschnuppe *North, *South, *East, *West;
    static void message(Sternschnuppe *here);
};

Bisher habe ich einen neue Sternschnuppe folgendermaßen hinzugefügt:
Code:
Sternschnuppe S1("Name");
//Nun soll es in etwa folgendermaßen geschehen:
//Sternschnuppe *S1....

Wo genau müsste ich was ändern das es so funktioniert?
Danke im Voraus.
 
Code:
Sternschnuppe *S1 = new Sternschnuppe("Name");

Für den Fall, dass ich richtig verstanden habe, was du willst... :)
 
Wenn man heutzutage nicht 20 Jahre altes C++ lernen will, eher so:
Code:
auto S1 = std::make_shared<Sternschnuppe>("Name");
S1->Funktion()
 
Das wäre dann die Smartpointervariante der STD-Lib, nehme ich an? Frage interessehalber, bin sonst in Qt unterwegs.
 
@Grimba: Korrekt. Bin auch am überlegen, mal ein Qt-Projekt zu machen, war bisher immer in reinem C++-Code unterwegs (letztes Mal ist aber schon ein paar Jahre her). Ein Vorteil von C++ ist halt die rückwärtskompatibilität, dass Programme von vor 20 Jahren mit minimalen Änderungen durch einen aktuellen Compiler laufen würden.
Leider liegt da vllt auch die größte Krux mit C++: So viele veraltete Weisen etwas zu machen. Und wenn man die alten, klassischen Ur-Pointer nutzt, kriegt man halt Speicherlecks ala 1990er.

Die Möglichkeiten mit Qt sind ja schon gewaltig. Leider bricht die API aber doch schon mal, soweit ich weiß.
Ich würde also in der Logik reines C++ und in den Qt-Teilen die Fähigkeiten von Qt nutzen. Je nach Bedarf noch fürs Filesystem etc einen Wrapper schreiben. Es gibt da auch einen schönen Talk auf Youtube, wie ein Programm von GTK zu Qt wechselt. Und leider ist sowas die Hölle, wenn die Bibliothek zu tief drin sitzt. C++ ist ja komplett platformunabhängig (Aber die Compiler nicht) und deren Smartpointer laufen in jedem C++11-Compiler.
Ergänzung ()

Da die Variable "sternnename" nicht genutzt wird, wirds ja wegoptimiert. Inklusive Tippfehler. :D

Und gerade, wenn ich mir die Klasse angucke, dass also ein Netz von Sternen aufgebaut wird (Norden, Süden, usw) glaube ich, dass die Speicherverwaltung ohne Smartpointer für Blut und Tränen sorgen wird. ^^

@JavaBeginner: Wofür schreibst du den Code? Schule? Uni? Lernst du selber? Und welche Quellen nutzt du dafür?
 
Zuletzt bearbeitet:
Falls es jemanden interessiert was ich damit vor habe/falls jemand einen bessere Idee diesbezüglich hat:
Ich wollte einen Hintergrund kreieren welcher aus einem interaktiven Sternen Netz besteht (wandernde Sterne mit denen man interagieren kann)
 
An deiner Stelle wäre ich mit static lieber sparsam. Dadurch hast du permanent die statischen Methoden und Member dauerhaft als eigenes Objekt im Speicher, ohne, dass diese direkt mit einem ggf. erstellten Objekt der Klasse Sternschnuppe in Verbindung stehen.

Mir erschließt sich in deinem Beispiel nicht, warum du hier static verwendest.

Was die Smartpointer angeht, so sehe ich das eher wie Fortatus: Sowas kann einem schonmal den Hintern retten, wenn noch jemand anders, als man selbst, auf den Speicher aufpasst :)
 
Also diesen Teil des Konstruktors verstehe ich auch nicht.
Code:
North = this;
South = this;
East = this;
West = this;
Was soll das bewirken? :freak: (Was technisch dort passiert weiß ich, aber ich versteh nicht der Fachliche Hintergrund sein soll)
 
Zurück
Oben