Considerare:C++: i costruttori di copia polimorfica potrebbero funzionare?
class A
{
public:
A(int val) : m_ValA(val) {}
A(const A& rhs) {}
int m_ValA;
};
class B : public A
{
public:
B(int val4A, int val4B) : A(val4A), m_ValB(val4B) {}
B(const B& rhs) : A(rhs), m_ValB(rhs.m_ValB) {}
int m_ValB;
};
int main()
{
A* b1 = new B(1, 2);
A* b2 = new A(*b1); // ERROR...but what if it could work?
return 0;
}
Would C++ essere rotto se "nuovo A (b1)" è stato in grado di risolvere per la creazione di una nuova copia B e la restituzione di un A?
Questo potrebbe essere utile?
+1, ma vorrei anche aggiungere un distruttore virtuale alla classe;) –
E' stato davvero un esperimento mentale. E mentre questo è il modo standard per implementare i costruttori di copie virtuali, ero curioso di sapere perché il linguaggio non fornisce un modo standard per farlo. – 0xC0DEFACE
Il ritorno covariante è migliore: B * B :: Clone() –