Korrekte Methode aufrufen
-
Hallo!
Ich habe folgendes Problem. Ich habe eine Basisklasse von der leiten sich mehrere Klassen ab. Ich habe jetzt eine Funktion die als Parameter einen Pointer auf die Basisklasse bekommt und diese Funktion soll jetzt je nachdem welche Klasse als Parameter angegeben ist die korrekte Funktion aufrufen. Vielleicht ist es besser wenn ich den Code zeige:
#include <iostream> using namespace std; class A { public: virtual A* getObject() { return this; } }; class B: public A { virtual A* getObject() { return this; } }; class C: public A { virtual A* getObject() { return this; } }; void foo(A* pA) { cout << "A"; } void foo(B* pB) { cout << "B"; } void foo(C* pC) { cout << "C"; } void give(A* pA) { foo(pA->getObject()); } int main() { B* pB = new B(); C* pC = new C(); give(pB); // Output A but i want B give(pC); // Output A but i want C return 0; }Wie würde ich das am elegantesten und effizientesten machen?
Vielen herzlichen Dank!
Lg Cplusplusler
-
Wenn das erst zur Laufzeit bekannt ist mit einer virtuellen Methode. (Oder wenn du faul bist.) Sonst mir CRTP.

Edit:
Keine Ahnung was dieses virtual getObject da bringen soll, Polymorphie geht so:#include <iostream> struct A { virtual void foo() { std::cout << "A\n"; } }; struct B : public A { virtual void foo() { std::cout << "B\n"; } }; void bar(A& a) { a.foo(); } int main() { B b; bar(b); }