Sto riscrivendo un'applicazione utilizzando C++ 11 puntatori intelligenti.C++ 11 puntatori intelligenti e polimorfismo
ho una classe di base:
class A {};
E una classe derivata:
class B : public A {
public:
int b;
};
Ho un'altra classe contenente un vettore sia con oggetti A o B:
class C {
public:
vector<shared_ptr<A>> v;
};
Non ho problemi a costruire oggetti C con A (classe base) ma come posso riempirlo con oggetti B (classe derivata)?
sto cercando questo:
for(int i = 0; i < 10; i++) {
v.push_back(make_shared<B>());
v.back()->b = 1;
};
e il compilatore restituisce: errore: 'Classe A' non ha alcun membro denominato 'b'
Che cosa stai cercando di fare? Sembra trattarsi di A come polimorfico è un'idea sbagliata, dal momento che non ne farai uso. –
Non si tratta di puntatori intelligenti, si sta utilizzando il polimorfismo in modo errato. Sostituisci membro b pubblico con funzione virtuale (probabilmente, ottieni e imposta funzioni). –
Ho semplificato le classi. Nella loro forma reale il polimorfismo ha un senso. –