C++ lernen?



  • Klassen und Vererbung haben sich mir zu Anfang auch nicht erschlossen (hatte vorher hauptsächlich Assmebler programmiert). Ich bin dann beruflich in C++ eingestiegen und habe in dem Projekt Klasse bzw. OO einfach _hingenommen_. Ich hatte den Vorteil (?) das ich in ein bestehendes Projekt reinkam und dieses neuen Anforderungen wegen "umbauen" mußte. Als ich dann nach 2-3 Monaten an einer Stelle angelangte, wo ich radikal das Userinface umbauen mußte, hat es bei mir *klick* und "Aha!" gemacht.

    Es ist wirklich so, das man mit proceduraler Programmierung ein Ziel erreichen kann. Deshalb erschliesst sich einem die OOP nicht gleich, wahrscheinlich sogar weil man unbewusst eine Blockade dagegen aufbaut. Ich hatte auch immer gesagt "Wozu OO??? Brauch ich nicht!". Aber ich kann nur eines sagen: wenn es hart auf hart kommt, ist OOP einfach genial. Und dieses Erlebnis mußt du noch bekommen. Dazu mußt du entweder ein eigenes OO-basiertes Projekt entwickeln (es muß aber schon umfangreicher sein) oder am besten in ein bestehendes OO-basiertes Projekt rein gehen und es modifizieren, erweitern...



  • Hallo Leute! Vielen Dank für die vielen ausführlichen Antworten. Euer Forum ist einsame Spitze!!!

    André und Werner, die Erklärungen zu OOP leuchten mir ein. Im Prinzip ist es also so, daß mit OOP auf einer Ebene programmiert wird, die dem Menschen näher ist als dem Computer. Verstehe ich das richtig so?

    Artchi, Ich möchte auf jeden Fall C++ und OOP lernen, wenn ich auch noch nicht genau weiß wofür es in meinem Fall nützlich sein könnte. Aber allein schon aus purem Interesse.

    Ich habe übrigens noch eine Frage. C++ Code wird genau so wie C Code in Maschinensprache übersetzt. Wie ist es dabei mit den Objekten? Benutzt C++ dafür eine Library, die meine Objekte verwaltet oder wie funktioniert das? Ich frage aus dem Grund, weil ich eventuell C++ für meine Mikrokontroller benutzen möchte.
    Danke!!!



  • Fred vom Jupiter schrieb:

    André und Werner, die Erklärungen zu OOP leuchten mir ein. Im Prinzip ist es also so, daß mit OOP auf einer Ebene programmiert wird, die dem Menschen näher ist als dem Computer. Verstehe ich das richtig so?

    Kann man in etwa so stehen lassen. Das Hauptprinzip ist das man bei OO mehr abstrahiert und Implementationsdetails verbirgt. Man behält so den Überblick und kann (im Idealfall) Bereiche leichter austauschen.

    Und bei OO betrachtet man Funktionalität und Daten zusammenhängend (Stell dir einfach einen DVD-Spieler vor: Nach außen hin eine einfache Schnittstelle hält er innen alle Implementationsdetails verborgen).

    Fred vom Jupiter schrieb:

    ...Ich möchte auf jeden Fall C++ und OOP lernen, wenn ich auch noch nicht genau weiß wofür es in meinem Fall nützlich sein könnte. Aber allein schon aus purem Interesse.

    Im Hardwarebereich kenne ich mich leider nicht so aus, aber ich kenne einige sehr weltweit agierende Firmen die C++ in der Hardwareprogrammierung verwenden.

    Fred vom Jupiter schrieb:

    Ich habe übrigens noch eine Frage. C++ Code wird genau so wie C Code in Maschinensprache übersetzt. Wie ist es dabei mit den Objekten? Benutzt C++ dafür eine Library, die meine Objekte verwaltet oder wie funktioniert das? Ich frage aus dem Grund, weil ich eventuell C++ für meine Mikrokontroller benutzen möchte.

    Vereinfacht gesprochen kommt am Schluß immer das gleiche raus. Es gibt sogar C++ Compiler (oder sollte man lieber C++ Fronend Compiler sagen) die zuerst aus dem C++ Code C generieren. So z.B. der Comeau C++ Compiler (der Compiler der den C++ Standard wohl mit am besten abdeckt). Für einen normalen Programmierer ist eigentlich auch egal was der Compiler macht, es geht um den Ansatz. OO dient in erster Linie zur Vereinfachung der Programmierung bei größeren Projekten.

    Beispielsweise werden Virtuelle Methoden über Sprungtabellen (Funktionszeiger) gelöst, und eine Methode (Funktion einer Klasse) kannst du dir in etwa wie folgt vorstellen:

    // C++
    class A
    {
      private:
        int a;
      public:
        void setA(int a)
        {
           this->a = a;
        }
    };
    
    // Das ganze in C
    struct A
    {
      int a;
    };
    void setA(A* this, int a)
    {
       this->a = a;
    }
    

    Bestimmte konstrukte (wie Zugriffsmodifizierer) "überleben" nicht zwingend die Übersetzung. Diese werden vor der eigentlichen Erstellung überprüft.

    cu André



  • Also die Objekte sind letztendlich vergleichbar mit den "struct"-Objekten aus C. D.h. die sprichtst du entweder über einen Pointer (Heap/Freestore) an oder über eine Variable im Scope (Stack).

    Eine Verwaltung von Seiten der Runtime gibt es nicht. Man kann aber Garbagecollection oder Smartpointer verwenden, um das Leben einfacher zu machen.

    C++ wird auch in Microcontroller/Embedded-Bereich eingesetzt. Hauptsache es gibt dafür einen Compiler.



  • WOW, Leute ihr erstaunt mich! Noch nie konnte es mir jemand so gut erklären wie ihr. RESPEKT!!!! Woher wisst ihr das alles so genau?
    Ich muß schon sagen, daß ich eine völlig falsche Vorstellung von C++ hatte. Man kann mit C++ also auf einer höheren Abstraktionsebene programmieren aber ohne gleichzeitigen Kontrollverlust. Das ist einfach phantastisch!
    Aber bevor ich euch weiter mit Noob-Fragen bombardiere, schaue ich mir erstmal die Tutorials an, die Werner empfohlen hat. Naja, eine kleine Frage hätte ich doch noch: Wo kann ich den Comeau C++ Compiler downloaden, oder muß man den kaufen?



  • Fred vom Jupiter schrieb:

    Naja, eine kleine Frage hätte ich doch noch: Wo kann ich den Comeau C++ Compiler downloaden, oder muß man den kaufen?

    Den Comeau C++ Compiler kann man für etwa 50 Dollar kaufen, wobei man für diesen einen Backend-Compiler braucht (z.B. MSVC++ oder andere). Ich weiß auch nicht ob du mit dessen Ausgabe etwas anfangen kannst, zudem hat der Comeau keine direkte IDE-Unterstützung.

    Ich würde dir zu einen üblichen, aber möglichst aktuellen C++ Compiler raten. Ob nun z.B. unter Windows MSVC++ 2005 (die Expressedition ist kostenlos) unter Linux den GCC...

    cu André



  • Hallo Leute,
    Ich habe mich etwa ein halbes Jahr mit C++ beschäftigt, aber ich glaube daß das nichts für mich und meine Zwecke ist. 😞
    C++ ist ganz nett, z.b. nimmt einem die STL viel Arbeit ab, aber irgendwie ist alles viel(!) komplizierter, es gibt 1001 Möglichkeiten. Aber C++ hat für mich keinen Mehrwert gebracht.
    Ich bleibe bei meinem "einfachen" C. Hab mich wohl zu sehr daran zu sehr gewöhnt und alles geht viel lockerer von der Hand.

    Trotzdem danke für eure Hilfe.

    Fred
    :schland:



  • was hastn so in der zeit alles auf die beine gestellt?
    hattest du lektuere?
    wie ist mitlerweile dein wissensstand ueber oop?



  • Fred vom Jupiter schrieb:

    Ich habe mich etwa ein halbes Jahr mit C++ beschäftigt, aber ich glaube daß das nichts für mich und meine Zwecke ist. 😞

    Kann passieren. C++ ist auch nicht das Allheilmittel. Etwas verstehe ich aber nicht...

    Fred vom Jupiter schrieb:

    C++ ist ganz nett, z.b. nimmt einem die STL viel Arbeit ab,... Aber C++ hat für mich keinen Mehrwert gebracht.

    ... also entweder dir wird Arbeit abgenommen und du hast Mehrwert, oder du machst dir die gleiche Arbeit und hast keinen Mehrwert.

    cu André
    P.S: Imho ist C++ so kompliziert wie man es sich selbst macht.



  • 👎

    C++ heißt doch nicht gleich jeden Schmarrn in ne Klasse zu packen und zigmal zu vererben...

    Du willst also wirklich bei reinem C bleiben? Ist eine dumme Entscheidung, sry.

    Naja viel Spaß mit char*, printf, strcpy, strcmp, strcat und dem ganzen Klump 👍



  • eventuell hast du den fehler gemacht alles zwanghaft in klassen kapseln zu wollen



  • Ich verstehe auch nicht, inwiefern C++ kompliziert sein soll. Schließlich ist fast jeder C-Code auch gültiger C++-Code... C++ gibt dir lediglich mehr Möglichkeiten, die du nutzen kannst, aber nicht musst. Allein schon std::string und den Standardcontainern sind ein Grund, C++ vorzuziehen. Falls dir Templates zu kompliziert sind, kannst du dir ja vorerst nur die Grundlagen darüber aneignen.
    Vielleicht hast du wirklich versucht, alles irgendwie in Klassen zu stopfen? Es ist vielleicht besser, anfangs alles so wie in C zu machen... auf die Idee, Klassen für einzelne Datenstrukturen zu verwenden, kommst du dann mit der Zeit von selbst. Und auf diesem Weg erschließt sich damit dann auch automatisch deren Sinn für dich.



  • Hallo,

    Mr Evil schrieb:

    eventuell hast du den fehler gemacht alles zwanghaft in klassen kapseln zu wollen

    Ja das kann sein. Vielleicht war meine Erwartungshaltung zu hoch. Ich wollte zu viel in zu kurzer Zeit erreichen und alle Möglichkeiten von C++ kennenlernen. Im Endeffekt habe ich aber gemerkt, daß alles was ich mit C++ gemacht habe, in C viel einfacher ist. Bitte versteht mich nicht falsch. Ich habe nichts gegen C++, nur ist es für meine Zwecke zu überladen und bringt mir nichts.

    :schland:
    Fred



  • Wir sehn uns wieder, wenn du mit folgendem in ANSI-C Forum auftauchst 😉

    void func(struct blubb* obj)
    {
    /* 1 */ switch(obj->flag) {
    /* 2 */ case 0:
               obj_foo(obj);
               break;
    /* 5 */case 1:
               break;
            case 2:
               /* ... */
               break;
            case 3:
               /* ... */
               break;
            case 4:
               /* ... */
    /* 15 */break;
        }
    }
    

    und du Krampfhaft versuchst, Polymorphismus in C umzusetzen. Dann wird dir klar werden, dass

    class Base: {
    public:
        virtual ~Base() { }
        virtual void foo() = 0;
    };
    
    class Der1: public Base { /* ... */ };
    class Der2: /* ... */
    // ...
    class Der5: public Base /* ... */
    
    void func(Base& b)
    {
    /* 1!!! */ b.foo();
    }
    

    viel mehr Arbeit abnimmt, wartbarer und auch einfacher erweiterbar ist.

    Naja, du wirst deine Erfahrungen noch machen.


Anmelden zum Antworten