Weiter gehts... Nur wo?



  • Auch HumeSikkins hat eine gute C++ FAQ-Seite unter http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs
    Weiß eigentlich einer, wo HumeSikkins abgeblieben ist?



  • cooky451 schrieb:

    Hacker schrieb:

    Yada schrieb:

    anderen Themen von C++ die doch schon "fortgeschrittener" sind (Templates, ...).

    Ist das wirklich fortgeschritten? Das ist doch eher Anfänger-Zeug, nicht?

    Er schreibt doch selbst, dass er noch Anfänger ist, aber eben kein blutiger Anfänger. Also eigentlich sucht er ein Buch, dass insbesondere auf die Eigenheiten von C++ eingeht.

    Richtig. Mir würde es wenig helfen, ein Buch zu lesen, dass mir erklärt wie If-Bedingungen funktionieren, usw.. 😉

    Und danke für die Links!



  • Th69 schrieb:

    Weiß eigentlich einer, wo HumeSikkins abgeblieben ist?

    Da es zum Teil mal wieder am guten Ton vorbei ging und sowieso OT war hab ich die Folgediskussion auf die Frage mal abgeschoben:

    http://www.c-plusplus.net/forum/298986



  • So, nachdem ich mich wieder bisschen damit beschäftigt habe (und ein neuer Thread einfach nur Verschwendung wäre):

    - Pointer:
    Pointer-Artithmetik ist mir noch etwas schleierhaft. Die Syntax dazu ist zwar einfach, aber mir erschließt sich der praktische Nutzen einfach nicht - evtl. weil ich das System selbst noch nicht ganz durchgeblickt habe.

    - Templates:
    Templates verstehe ich jetzt zwar, aber auch hier fehlt mir praktische Nutzen. Wo setzt man Templates gezielt ein?



  • Yada schrieb:

    - Pointer:
    Pointer-Artithmetik ist mir noch etwas schleierhaft. Die Syntax dazu ist zwar einfach, aber mir erschließt sich der praktische Nutzen einfach nicht - evtl. weil ich das System selbst noch nicht ganz durchgeblickt habe.

    Schließt das Referenzen mit ein, oder meinst du wirklich nur Pointer?

    Yada schrieb:

    Templates verstehe ich jetzt zwar, aber auch hier fehlt mir praktische Nutzen. Wo setzt man Templates gezielt ein?

    Nehmen wir mal einen offensichtlichen Nutzen: Container. Alle C++ Container sind Templates, damit sie für jeden Datentypen funktionieren. Ein std::vector<char> nutzt z.B. den gleichen Code wie ein std::vector<int>, obwohl diese wahrscheinlich unterschiedlich viel Speicher für ein Element reservieren etc.
    Trotzdem unterscheidet sich die Funktionsweise für verschiedene Typen nicht, deswegen nutzt man ein Template.



  • Schau dir mal die Bücher von: Bjarne Stroustrup an. (Das is der Erfinder von C++ von dem gibt es Bücher für anfänger sowie fortgeschritte etc. )



  • Danke für die Buchempfehlung, werde ich mir ansehen!

    Und cooky:
    Für den Moment nur Pointer an sich.



  • Yada schrieb:

    Und cooky:
    Für den Moment nur Pointer an sich.

    Was heißt für den Moment? Es ist ein Unterschied ob man versucht den Sinn von "Zeigern" im Sinne von Variablen, deren Wert auf etwas zeigt zu erklären, oder den Sinn von Pointern neben Referenzen.



  • Pointer sind sehr sinnvoll, wenn du z.B. eine Globale "Variable" hast, die in vielen Modulen genutzt wird, aber deren Wert oder Inhalt erst zur Laufzeit ermittelt wird, also in der Main. Z.B. in Qt als qApp, ein Zeiger auf die aktuelle QApplication, die als allererstes in main() erzeugt wird, implementiert; in Headern muss man mit der aktuellen qApplication arbeiten, kennt aber ihre Werte noch nicht.
    Neben Referenzen können Zeiger ihren Wert ändern, also auf verschiedene Dinge zeigen, was in manchen implementierungen sinnvoll ist.



  • Okay, so langsam verstehe ich Pointer. Zumindeste glaube ich das. Soweit ichs verstanden habe, zeigen Pointer auf bestimmte Speicherzellen und sind somit unabhängig vom eigentlichen Wert. Soweit richtig, oder?

    Wäre dieser Gedankengang dann "sinnvoll" bzw. überhaupt möglich:
    Eine Applikation X verfügt über die Klasse Y mit der Klassenvariable Z. Der Wert, den Z bekommen soll, wird bereits vor der Initialisierung von Klasse Y festgelegt. Könnte man also für den Wert Z einen Pointer verwenden, sodass der Konstruktor der Klasse Y auf diese Speicherzelle zugreift? Stark vereinfachtes Beispiel, aber immerhin würde man sich die Arbeit sparen der Klasse die Variable Z übergeben zu müssen.



  • Ne, da nimmt ma static constants.

    struct Y
    {
        static const size_t meinenummer;
    };
    
    //Außerhalb der Klasse:
    const size_t Y::meinenummer;
    

    Weiß nicht, ob es so richtig ist, ich glaube bei Basisdatentypen muss man sie außerhalb, bei Klassen innerhalb der Klassendefinition definieren.



  • Yada schrieb:

    Okay, so langsam verstehe ich Pointer. Zumindeste glaube ich das. Soweit ichs verstanden habe, zeigen Pointer auf bestimmte Speicherzellen und sind somit unabhängig vom eigentlichen Wert. Soweit richtig, oder?

    Ein Zeiger ist genauso wie ein int, char, float eine Variable, darum auch Zeigervariable. Der Wert der Variablen ist eine Adresse. Bedeutung: Der Zeiger verweißt auf die Adresse, die er gespeichert hat.



  • Hacker schrieb:

    Ne, da nimmt ma static constants.

    Ne, da nimmt ma non-static constants.
    Konkret: Lass das static weg, definiere den Wert innerhalb der Klasse und hör auf, hier Antworten zu geben.



  • schtätick schrieb:

    Hacker schrieb:

    Ne, da nimmt ma static constants.

    Ne, da nimmt ma non-static constants.
    Konkret: Lass das static weg, definiere den Wert innerhalb der Klasse und hör auf, hier Antworten zu geben.

    Gut, ich meine nur, dass der Wert ja sowieso für alle Instanzen gleich ist, wieso dann nicht gleich static? Merke: er ist vor der Klasseninstanziierung festgelegt.



  • Ah okay, danke.

    Dann gleich mal was völlig anderes:
    Da man ja bekanntlicherweise programmieren sollte, um eine Sprache irgendwann zu beherrschen, und ich das ganze etwas "ausschmücken" wollte, habe ich angefangen so eine Art "Snake"-Klon zu basteln (Konsolenvariante).

    Gelöst hab ichs so, dass ich die Koordinaten in einem Zweidimensionalen-Array speichere und mich via getch() bzw. den Pfeiltasten schonmal im bestimmten Spielraum bewegen kann.
    Problem nur ist die Art und Weise meiner Spielfeld-"Generierung". Diese wird bei jeder Bewegung aufgerufen um das Spielfeld zu updaten - unschöner Nebeneffekt sind die Ruckler die man kurzzeitig vom Clearscreen sieht.

    Kann man das irgendwie - möglichst mit Basics und Co. - umgehen?


Anmelden zum Antworten