Mal wieder AdvPT :D

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Mal wieder AdvPT :smiley:
Servus,

ich verstehe eine Lösung nicht ganz, vllt kann mir jemand helfen. Assignment 6 Aufgabe 1 c) und f)
http://www10.informatik.uni-erlangen.de/Teaching/Courses/WS2009/AdvProg/ex06.pdf

Musterlösung lautet:
c) 2 with 1.0
f) 5 with 10

Meines Erachtens müsste es aber doch
c) 4 with 1.0
f) 5 with 20
sein. Dafür hat man doch “virtual”! Eben dass Derived genutzt wird und nicht Base!?

Thx für Hilfe :wink:


pb ist aber ein Base* pointer und kein Derived


und warum wir dann bei f) 5 (von Derived!) aufgerufen? Ok, der Parameter kommt von Base… Warum die Funktion nicht auch?


Ok, ausfuehrlicher:

c) 2 with 1.0;

weil aus dem parameter “1.0” kein complex gemacht wird, sondern nur double. Die funktion f(double) gibts aber nur in Base

f) 5 with 10

Das passiert weil standard werte fuer parameter schon waehrend der compilezeit festgelegt werden. Diese werden dann anhand der Art des Pointers festgelegt (Base*). Waere das ein Derived* pb, haette der Compiler die “20” als default wert festgelegt. So kanns also tatsaechlich passieren, dass du funktionen der abgeleiteten klasse mit standard parametern der base klasse aufrufst!


ah, super thx… :wink: