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!!


Anmelden zum Antworten