A ma funkcję statyczną A :: create(), która tworzy wystąpienie A, wykonuje pewną inicjalizację i zwraca wskaźnik do niego. Chcę utworzyć podklasę A i mają podobną Create() func:co się stanie, jeśli rzut (wskaźnik do klasy A) na (wskaźnik do jego podklasy B) w C++
class B : public A {
public:
static B* create();
int val;
//...
}
w tym B :: create function() Mam wykonać następujące czynności:
B* B::create() {
auto b = (B*)A::create();
b -> val = 0;
//...
return b;
}
Czy to właściwa droga to zrobić? Co stanie się po obsadzie?
Kontynuacja: A ma chroniony/prywatny konstruktor, Jak powinienem napisać B :: create() lub konstruktor B? Chcę się vars dziedziczone z mieć takie same wartości jak te tworzone przez A :: create() miałby
Niezdefiniowane zachowanie. –
Zależy od wielu rzeczy, czy to zadziała; ale nigdy nie polegaj na nieokreślonym zachowaniu. – CoffeeandCode
Unikaj rzutowania w stylu C w C++ (zamiast tego użyj 'dynamic_cast'). Ponadto, jeśli klasy "A" i "B" dzielą podobne elementy danych, należy rozważyć użycie składni, kompozycji lub dziedziczenia, aby uniknąć powielania kodu. – Dai