Funktionsaufruf/Polymorphie
-
Hallo Forum!
Ich habe morgen eine C++ Klausur und versuche mich gerade an alten Aufgaben.
Kann mir wer erklären warum Funktionsaufruf //(f) in der main die Funktion //(3) aufruft??#include<iostream> using namespace std; class A{ public: virtual void f();// 1 }; class B:public A{ public: virtual void f();//2 }; class C{ public: void f();//3 }; class D: public B, public C{ public: void f();//4 }; class E: public C{ public: void f();//5 }; int main() { A a; B b; C c; D d; E e; A *ap; B *bp; C *cp; a.f(); //(a) --> ruft 1 auf ap=&b; ap->f(); //(b) --> ruft 2 auf bp=&b; bp->f(); //(c) --> ruft 2 auf bp=&d; bp->f(); //(d) --> ruft 4 auf cp=&c; cp->f(); //(e) --> ruft 3 auf cp=&d; cp->f(); //(f) --> ruft 3 auf cp=&e; cp->f(); //(g) --> ruft 3 auf d.f(); //(h) --> ruft 4 auf return 0; }Lg Caro
-
Weil class C nicht von A oder B erbt und f() nicht virtuell ist. Damit wird nicht der Laufzeittyp ermittelt und in einer vtable (o.Ä.) nach der passenden Methode gesucht, sondern stur die Methode aufgerufen, die zum dereferenzierten Objekt passt - und das ist bei einem Zeiger "C* cp" nunmal C::f().
-
vielen Dank!!