Klassen und Instanzen! Ist die Anweisung zulässig oder nicht?



  • Moin! Ich habe ein Problem mit folgender Aufgabe:

    Gegeben sei die folgende Klassenhierachie:
    class Object{...};
    class Vehcile : public Object{...};
    class Car : public Vehcile{...};
    class Bicycle : public Vehcile{...};

    Ist die Anweisung Object *op = new Car(); in C++ zulässig?
    Ist die Anweisung Car *cp = new Vehcile(); in C++ zulässig?

    Hierbei soll, laut Musterlösung, die erste Anweisung zulässig die zweite nicht zulässig sein. Meines Wissensstands nach hätte ich es genau anders herum vermutet und kann es mir wirklich nicht erklären, weshalb es sorum sein soll. Daher wäre ich für eine ausführlichere Antwort sehr dankbar.

    MfG Kicker



  • Du vererbst hier in eienr Linie, jede Klasse vererbt dabei automatisch alles von dem sie selbst geerbt hat mit.

    Kicker schrieb:

    Ist die Anweisung Object *op = new Car(); in C++ zulässig?

    Deshalb funktioniert das hier, weil Car() ein Object() ist es hat ja davon geerbt durch Vehicle(). Ohne den Zeiger umzucasten kannst du allerdings nur auf den Object Teil zugreifen. Um das zu verstehen musst du dir folgendes Vorstellen, der Zeiger speichert nur Daten und es ist ihm egal wie groß diese sind, damit greift dieser Zeiger eben nur auf den Object Teil zu.

    Kicker schrieb:

    Ist die Anweisung Car *cp = new Vehcile(); in C++ zulässig?

    Nein da sgeht wie schon in deienr Musterlösung steht nicht, der Grund ist ganz einfach, ein Car() ist zwar ein Vehicle aber ein Vehicle ist eben kein Car. Würde diese Anweisung so funktionieren würde dem Zeiegr der Teil fehlen der durch Car() hinzugefügt wird er würde also nur alles bis Vehicle beinhalten und würde damit Speicherschutzverletzungen oder ähnliches bei verwendung auslösen.

    Ich hoffe das war halbwegs verständlich.


Anmelden zum Antworten