Ecco quello che sto cercando di fare (questo codice non funziona):In che modo una classe C++ derivata può clonare se stessa tramite un puntatore di base?
class Base
{
virtual Base *clone() { return new Base(this); }
virtual void ID() { printf("BASE");
};
class Derived : publc Base
{
virtual Base *clone() { return new Derived(this); }
virtual void ID() { printf("DERIVED"); }
}
.
.
Derived d;
Base *bp = &d;
Base *bp2 = bp->clone();
bp2->ID();
quello che avevo come è quello di vedere "derivata" stampato ... quello che ottengo è "BASE ". Sono un programmatore C di lunga data e abbastanza esperto di C++ ... ma non sto facendo progressi con questo ... ogni aiuto sarebbe apprezzato.
Mostrando più codice, in particolare tutti i costruttori di ogni classe in questo caso sono importanti. (Alcuni possono essere dedotti dal tuo codice, ma aiuta a ottenere risposte più corrette da tutti ...) – Macke
Hm. Il codice iniziale aveva Base bp = & d. Ora è stato cambiato in Base * bp = & d; – Macke
Non pertinente alla domanda, ma vorrete anche distruttori virtuali sulle classi. –