Salve a tutti, ogni tanto mi tocca passare di qua a chiedere delucidazioni in quanto purtroppo, il c++ è tanto potente quanto difficile (almeno per me).

Allora, il discorso è questo:
Ho tanti oggetti, che, al loro interno devono contenere tra le varie cose un altro tipo di oggetto.

Putroppo, l'oggetto contenuto (MATERIALE) può essere di diverso tipo (ACCIAIO, CALCESTRUZZO...) che, qualunque materiale sia, avrà al suo interno delle funzioni.

Mi spiego con un po' di codice e vi dico cosa non mi funziona:
codice:
class Elemento {
        ...
        Materiale* m; //a priori non conosco che tipo di materiale sia
        ...

        double get_E() {
            m->get_E();
        }

       void set_materiale(Materiale& mat){
            m = &mat;
        }
        
       ...
};
codice:
class Materiale {
    public:
        virtual double get_E()=0;
};

class Acciaio : public Materiale {
    ...

    double get_E() {
      E=100.;//variabile propria di Acciaio
      return E; 
    }
};

class CLS : public Materiale {
    ....
    
    double get_E() {
        return Ecls(); //funzione propria
    }
};
nel programma vero e proprio:
codice:
int main() {
    std::vector<Elemento> elementi;
    
    ....creo gli elementi...

//assegno materiale
std::vector<Acciaio> acciaio;
std::vector<CLS> cls;

    for (int k=0;k<elementi.size();k++) {
         ....
         //scelta materiale
         switch(scelta) {
              case 1: {
                     acciaio.push_back(Acciaio(...));
                     plate[k].set_materiale(acciaio[acciaio.size()-1]);
                         }
              break;
              case 2: {
                     armatura.push_back(CLS(...));
                     plate[k].set_materiale(cls[cls.size()-1]);
                         }
              break;
        }
successivamente, supponendo di settare tutti gli elementi con Materiale settato su Acciaio, usando
codice:
elemento[i].get_E()
mi aspetterei che fornisse il valore di 100, in realtà o non mi funziona e il programma dà errore o mi restituisce 0....

Ora, che sbaglio? E cosa dovrei fare per risolvere?
Ho utilizzato un puntatore in quanto, creando un puntatore di tipo "Materiale" poi posso sfruttare le funzioni delle classi derivate.
E' importante inoltre che ogni ELEMENTO abbia un oggetto MATERIALE suo non "condiviso" con altri ELEMENTI.

Vi ringrazio!!!