Mehrfachvererbung und vieles mehr ;)



  • Hallo erstmal 😉

    Ich hätte da eine Frage ^^

    Wenn ich einen Fall von Mehrfachvererbung habe: Nehmen wir an es gibt ein Objekt device von dem Mobilephone und PDA erben. Von PDA und Mobilephone erbt Smartphone. (Mobilephone und PDA erben nicht virtual)

    Ist es möglich von Smartphone aus, die Methoden aus zb. Device(mobilephone) über den Scope anzusprechen?

    Also Mobilephone::Device::getDevId();
    nicht Mobilephone::getDevId! (wäre ja über Vererbungslinie geregelt)



  • Hi,

    nerd85 schrieb:

    Ist es möglich von Smartphone aus, die Methoden aus zb. Device(mobilephone) über den Scope anzusprechen?

    Wieso probierst du es einfach nicht selber 😉

    Nein ist es leider nicht, du musst in mobilephone ne Methode für Smartphone bereitstellen die die Methode aus Device aufruft ...
    Edit: Oder du verwendest virtuelle Basisklassen, was eh besser wäre bei so einer Diamanten-Vererbung und rufst dann mit Mobilephone::Device::func() die Methode auf ...



  • nerd85 schrieb:

    Hallo erstmal 😉

    Ich hätte da eine Frage ^^

    Wenn ich einen Fall von Mehrfachvererbung habe: Nehmen wir an es gibt ein Objekt device von dem Mobilephone und PDA erben. Von PDA und Mobilephone erbt Smartphone. (Mobilephone und PDA erben nicht virtual)

    Ist es möglich von Smartphone aus, die Methoden aus zb. Device(mobilephone) über den Scope anzusprechen?

    Also Mobilephone::Device::getDevId();
    nicht Mobilephone::getDevId! (wäre ja über Vererbungslinie geregelt)

    ich bin mir nicht ganz sicher, was du meinst. aber irgendwie kommen wir schon ans ziel 🙂
    ist getDevId static? dann hast du gar kein problem.
    getDevId ist virtual? wäre es dann überhaupt sinnvoll, MobilePhone:Device:getDevId aufzurufen?
    Wie sehr möchtest du die Mehrfachvererbung weiterbetreiben? Dann können noch zusätzliche Schwierigkeiten entstehen, wenn Namen verdeckt werden usw. usf. Ist ein schreckliches Kapitel.

    Aber zurück zu deinem Problem, ich nehme an, du willst so etwas in der Art:

    static_cast<Mobilephone*>(this)->Device::getDevId();
    

Anmelden zum Antworten