Es gibt eine virtuelle Methode in der Basisklasse, die dasselbe Basisobjekt (nicht Zeiger) zurückgibt. In einigen der virtuellen Überschreibungen möchte ich abgeleitete Objekte als Basis zurückgeben. Problem ist jedoch, dass die Methode das Basisobjekt immer dazu bringt, abgeleitete Werte zurückzugeben. Hier ist einfaches Beispiel:Zurückgegebenes abgeleitetes Objekt als Basis von virtueller Methode
#include <iostream>
#include <string>
class Base {
public:
Base() {}
virtual std::string myName() { return "Base"; }
virtual Base createAlike() { return Base(); }
};
class Derived : public Base {
public:
Derived() : Base() {}
std::string myName() override { return "Derived"; }
Base createAlike() override { return Derived(); }
};
int main() {
Derived d;
Base d1 = d.createAlike();
std::cout << d.myName() << std::endl;
std::cout << d1.myName();
return 0;
}
die Ausgänge:
Derived
Base
Wie es zu korrigieren?
Dank, dass das, was ich brauchte) – Rinat