Aus Konstruktor Rückschlüsse ziehen



  • Hallo Leute,
    ich habe noch Verständnisprobleme bezüglich Klassen.
    Es geht um diese Aufgabe:
    http://fs5.directupload.net/images/170712/urcvrlew.jpg

    Man soll Rückschlüsse ziehen, wie die Klasse auszusehen hat.
    Sehe ich das richtig, dass Whatever von den Klassen str und height erbt?

    Und noch was: Wo gehört die Funktion

    abc(float)
    

    ?
    In die Klasse Whatever oder in eine der beiden Basisklassen? Woher soll ich wissen, welchen Rückgabetyp sie hat? Ich habe mal void angenommen.

    Und wo soll

    float ding
    

    hin?

    Meine Lösung
    http://fs5.directupload.net/images/170712/snvw4uqx.jpg

    Der Compiler gibt keine Fehlermeldung aus. Kann aber trotzdem falsch sein.



  • Kompeila schrieb:

    Sehe ich das richtig, dass Whatever von den Klassen str und height erbt?

    Das ist eine Initialisierungsliste.



  • Das Ergebnis ist nicht eindeutig. Daher ja auch "versuchen Sie Rückschlüsse zu ziehen". Da man nur für diese eine Klasse die Header-Datei schreiben soll, hätte ich jetzt nicht mit Vererbung gerechnet - das wären dann ja 3 Klassen. Ist aber vom Code her möglich.

    Ich hätte einfach vermutet, dass float height , bool str und float ding ganz normale Member-Variablen sind und abc(float) irgendeine Methode ist, vermutlich mit Returntyp void.

    Aber das ist alles nicht eindeutig. Es können andere Typen sein oder es sich sogar um Vererbung handeln. Das zeigt, dass es schwer ist, in C++ an einem Schnipsel zu erkennen, was dieser genau tut.


  • Mod

    Kompeila schrieb:

    Sehe ich das richtig, dass Whatever von den Klassen str und height erbt?

    Vielleicht, vielleicht auch nicht. Man kann nur sagen, dass Whatever etwas haben muss, was durch str und height angesprochen wird. Das können auch eigene Member sein.

    Und noch was: Wo gehört die Funktion

    abc(float)
    

    ?
    In die Klasse Whatever oder in eine der beiden Basisklassen?

    Vielleicht in eine Basisklasse, vielleicht in Whatever selbst, vielleicht ist es eine freie Funktion. Kann man nicht sagen.

    Woher soll ich wissen, welchen Rückgabetyp sie hat? Ich habe mal void angenommen.

    Kann man nicht sagen. Ist auch nicht gefragt.

    Und wo soll

    float ding
    

    hin?

    Was soll damit sein? Es ist ein Parameter des Konstruktors, es muss nirgendwo sonst hin.
    this->ding muss entweder ein Member der Klasse Whatever oder ein sichtbares Attribut einer Basisklasse sein. Es muss kein float sein, es kann aber ein float sein.

    Meine Lösung
    http://fs5.directupload.net/images/170712/snvw4uqx.jpg

    Der Compiler gibt keine Fehlermeldung aus. Kann aber trotzdem falsch sein.

    Es ist eine mögliche Lösung. Es gibt viele andere Lösungen. Deine Erklärung, warum es ausgerechnet diese Lösung sein sollte hat Schwächen, die ich oben erklärt habe.

    PS: Wenn wir noch in Betracht ziehen, dass eventuell Makros definiert sein können, wird es richtig wild, was die Möglichkeiten angeht.


  • Mod

    Kompeila schrieb:

    Wo gehört die Funktion

    abc(float)
    

    ?
    In die Klasse Whatever oder in eine der beiden Basisklassen? Woher soll ich wissen, welchen Rückgabetyp sie hat? Ich habe mal void angenommen.

    Das musst gar keine Funktion sein. Es könnte auch irgendein Typ sein, mit geeignetem Konstruktor oder gar ein typedef auf einen primitiven Typ. Oder vielleicht auch ein Objekt mit überladenem ()-Operator.


Log in to reply