A ha una funzione statica A :: create() che crea un'istanza di A, esegue un'inizializzazione e restituisce un puntatore ad esso. Voglio creare una sottoclasse di A e hanno un simile create() func:cosa succede se lancio (un puntatore alla classe A) a (un puntatore alla sottoclasse B) in C++
class B : public A {
public:
static B* create();
int val;
//...
}
in questo B :: creare function() devo fare quanto segue:
B* B::create() {
auto b = (B*)A::create();
b -> val = 0;
//...
return b;
}
È questo il modo giusto per farlo? Cosa succederà dopo il cast?
Follow-up: A ha un costruttore protetto/privato, Come dovrei scrivere B :: create() o il costruttore di B? Voglio che i vars ereditati da A abbiano gli stessi valori di quelli creati da A :: create() avrebbe
Comportamento non definito. –
Dipende da un sacco di cose se funzionerebbe; ma mai fare affidamento su un comportamento indefinito. – CoffeeandCode
Evita i cast in stile C in C++ (usa invece 'dynamic_cast'). Inoltre, se le classi 'A' e' B' condividono dati simili, i membri considerano l'uso di mixin, composizione o ereditarietà per evitare la duplicazione del codice. – Dai