Virtuelle Funktionen und STL



  • @DocShoe sagte in Virtuelle Funktionen und STL:

    @wob
    Technisch richtig, aber ich glaube, du interpretierst zu viel in die Aufgabe.

    Nö, ich habe nur absichtlich die Aufgabenstellung wörtlich interpretiert. Und da die Frage einfach copy-paste einer Übungsaufgabe war, habe ich noch einen ganz anderen Vorschlag zur Lösung dazugepackt.

    Die Bezeichnung "armer Frischling" von @It0101 finde ich irreführend, denn es wurden bislang ja keine eigenen Anstrengungen zur Lösung unternommen. Also eher "fauler Frischling". Nicht einmal der Quellcode ist ordentlich formatiert.



  • @DocShoe dann tut es mir leid, dass du mich falsch verstanden hast. Ich hab die Aufgaben schon gemacht. Weiß aber nicht ob diese richtig sind. ich schreibe sie mal hier rein:

    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    list <Fahrzeug*> vec;
    class Fahrzeug{
       public: virtual void fahren()=0;
    }
    class Rennwagen : public Fahrzeug{
    void fahren() const {
    cout <<"Vroomm .\n";
    };
    class Traktor: public Fahrzeug{
    void fahren() const {
    cout <<"tuktuktuk.\n";
    };```
    
    ```//Aufgabe b
    int main(){
    Rennwagen rennwagen;
    Traktor traktor;
    for(Fahrzeug *f=vec) f->fahren();
    
    auto it = vec.begin();
    while (it != vec.end()){
    (*it)->fahren();
    it++;
    }```


  • @tariker Und das übersetzt? Ehrliche Frage. Hab's nicht ausprobiert.

    Zumindest Aufgabe 1 sieht mir beim drüber gucken eher nicht so aus.



  • @tariker sagte in Virtuelle Funktionen und STL:

    Ich hab die Aufgaben schon gemacht.

    Sehr gut. Dann musst du nun bitte den Quelltext richtig formatieren mit drei `-Zeichen hintereinander (vor und hinter dem Quellcode). Ansonsten werden wichtige Zeichen wie z.B. der * nicht korrekt dargestellt.

    Aber generell war in der Aufgabe von je 2 Treckern und 2 Rennwagen die Rede. Wo sind die bei dir?



  • Ne, das kann so nicht funktionieren.

    • list<Fahrzeug> kennt auf keinen Fall Fahrzeug.
    • Fahrzeug braucht einen virtuellen Destruktor
    • polymorphe Objekte direkt in einen Container zu stecken ist selten eine gute Idee, es sei denn, object slicing ist beabsichtigt.
    • in main wird die Liste nie befüllt.
    • ein std::list vec zu nennen ist bestenfalls unglücklich.

    Lass das mal durch einen Compiler laufen... wenn du keinen hast gibt´s auch online welche (Ideone, C++ shell)



  • @DocShoe einen Compiler habe ich auch. da benutze ich eclipse. Das problem ist, dass ich nicht weiter komme. Kann mir hier keiner behilflich sein



  • @tariker
    Und, übersetzt das bei dir? Nein? Welche Fehlermeldung spuckt der Compiler denn aus?
    Versetz dich doch mal in die Situation der anderen Forenteilnehmer. Du lieferst kaum Informationen und erwartest, dass sie dir bei Problemen helfen, die nur du kennst.

    • Stell konkrete Fragen und poste soviel Information wie möglich und gleichzeitig so wenig wie nötig.
    • Erwarte nicht, dass die hier die Lösung aufm Silbertablett präsentiert wird. Das Motto ist hier Hilfe zur Selbsthilfe


  • @tariker und bitte formatiere deinen Quellcode! Ansonsten ist es hier nicht möglich zu sehen, was du wirklich geschrieben hast. Siehe mein vorheriges Posting. Du klickst bitte bei deinem vorherigen Beitrag, wo der Quellcode drin ist, auf die 3 Punkte rechts und dann auf "Bearbeiten" und dann machst du die drei `-Zeichen vor und hinter deinen Code. Dann ist der Code auch nicht mehr komisch kursiv, sondern lesbar. Dann können wir weiterschauen. Am besten sagst du dann noch, was genau das Problem ist.



  • @wob tut mir leid. hab es gemacht;)



  • Gut, jetzt kann man das wenigstens lesen.

    Bitte kompiliere und stelle sicher, dass keine Warnungen und Kompilierfehler auftreten. Ein paar Dinge:

    • Klassendefinitionen wie class X { ... }; haben ein Semikolon am Ende (fehlt bei deinem Fahrzeug) - auch gehört zu jeder öffnenden Klammer eine schließende. Bei dir scheinen einige } zu fehlen.
    • void fahren() und void fahren() const sind unterschiedliche Funktionen. Nutze das Schlüsselwort override, um sicherzustellen, dass das "fahren" aus Rennwagen und Traktor das "fahren" aus Fahrzeug überschreibt.
    • class ist by default private. Soll das "fahren" nicht public sein?
    • Der Punkt von @DocShoe mit "polymorphe Objekte..." ist nicht mehr relevant, da dieser durch die fehlende Formatierung und somit einen nicht sichtbaren Stern entstanden war
    • (schrieb schon @DocShoe) Fahrzeug braucht einen virtuellen Destruktor. Die anderen Punkte von DocShoe sind ebenfalls noch zu beachten

    Deine Liste "vec" solltest du innerhalb von "main" deklarieren, wo das Fahrzeug schon bekannt ist. Es ist immer hilfreich, globale Variablen zu vermeiden.

    In deinem "main" solltest du noch einmal genauer nachschauen / genau überlegen, was du eigentlich machen willst.


Anmelden zum Antworten