Ich möchte nicht vorhandene virtuelle Methoden zu einer vorhandenen Klasse A
hinzufügen, die ich nicht ändern kann. Deshalb erstelle ich eine Klasse B
geerbt von A
und füge die Methoden hinzu, die ich will. Wenn ich nun ein Objekt vom Typ A
habe, kann ich es einfach als Objekt vom Typ B
betrachten? Sprich, ist der folgende Code Recht ?:Darf in C++ in eine abgeleitete Klasse umgewandelt werden, die nur nicht-virtuelle Methoden hinzufügt?
class A { <...> };
class B: public A {
void f();
};
A a();
void g(const B&);
void h() { g(static_cast<B&&>(a())); }
Es ist zu kompilieren und zu arbeiten, aber ich frage mich, ob es durch den Standard garantiert wird wie erwartet zu funktionieren. Ich sehe nicht, warum nicht, aber es fühlt sich nicht sehr sauber an.
Nein, die Besetzung verursacht undefiniertes Verhalten –
Aber 'B a;' gefolgt von einem Aufruf an eine Funktion, die ein 'A &' als Argument nimmt, wie in 'void foo (A & a);') und es als legal und Definiert: 'foo (a)' so dass innerhalb von foo, wenn du wirklich weißt, dass 'a' wirklich ein' b' ist (aber wie wärst du?), kannst du den Cast durchführen –
Warum willst du ein Objekt werfen? in etwas ist es nicht? – MikeMB