Hier ist die Situation. Angenommen, wir haben eine virtuelle Basisklasse (z. B. ShapeJuggler
), die eine Methode enthält, die einen gemeinsamen Zeiger auf ein virtuelles Basisklassenobjekt (z. B. Shape
) als Argument verwendet. Lassen Sie sich in den folgenden Pseudo-Code springen zu verstehen:C++ Vererbung und gemeinsame Zeiger
class Shape {
}
class ShapeJuggler {
virtual void juggle(shared_ptr<Shape>) = 0;
}
// Now deriving a class from it
class Square : public Shape {
}
class SquareJuggler : public ShapeJuggler {
public:
void juggle(shared_ptr<Shape>) {
// Want to do something specific with a 'Square'
// Or transform the 'shared_ptr<Shape>' into a 'shared_ptr<Square>'
}
}
// Calling the juggle method
void main(void) {
shared_ptr<Square> square_ptr = (shared_ptr<Square>) new Square();
SquareJuggler squareJuggler;
squareJuggler.juggle(square_ptr); // how to access 'Square'-specific members?
}
make_shared oder dynamisch/static_cast scheint nicht den Job zu erledigen. Ist es überhaupt möglich? Irgendwelche Ideen, Vorschläge?
Danke
'main()' sollte 'int' zurückgeben, nicht' void'. –
"_Wir haben eine virtuelle Basisklasse_" Sie haben das ** virtuelle ** Schlüsselwort in Ihrem Beispiel (oder "Pseudocode") vergessen – curiousguy