#include <iostream> using namespace std; class X { protected: static int n; int no; public: X(): no{n++} {cout << no;} virtual ostream& print (ostream& o) const {return o << ':' << no;} void f(X x) const { this->print(cout); x.print(cout);//Warum wird von hier print::X aufgerufen obwohl das x eine Kopie eines Objekts der Klasse Y ist? Anscheinend verstehe ich etwas nicht am Polymorhismus. } }; int X::n{3};
class Y : public X { public: ostream& print(ostream& o) const {X::print(o); return o << no+9;} };
int main() { Y a, b; X *c{&b}; c->f(a); return 0; } Erwartet: 34:413:3Dieser Post wurde am 20.02.2019 um 23:06 Uhr von bagration editiert.
Warum wird von hier print::X aufgerufen obwohl das x eine Kopie eines Objekts der Klasse Y ist?
x ist keine *vollständige* Kopie von einem Y. x ist ein X, kein Y, enthält also nur den Basisklassen-Anteil von dem Y-Objekt. Die Y-spezifischen Informationen werden nicht mitkopiert.
Willst du print polymorph verwenden, dann übergib an f keine Kopie, sondern eine Referenz oder einen Pointer.Dieser Post wurde am 21.02.2019 um 11:31 Uhr von ao editiert.