Ciao a tutti.
Devo creare una classe Struttura che tra i vari metodi ne ha uno addListaProprieta che accetta, come argomento, un'altra classe. Quest'altra classe però è generica e ha delle classi figlie.
codice:
class Proprieta
{
public:
    Proprieta();
    void setNumero(unsigned int numero);
    unsigned int getNumero();

private:
    unsigned int numero;
};

class Compressione : public Proprieta
{
public:
    Compressione();
    void setTipo(char tipo);
    char getTipo();

private:
    char tipo;
};

class Struttura
{
public:
    Struttura();
    void setVersione(char* versione);
    char* getVersione();
    void addListaProprieta(Proprieta proprieta);
    std::list<Proprieta> getListaProprieta();

private:
    char* versione;
    std::list<Proprieta> lista_proprieta;
};
In particolare vorrei, dopo aver creato un'istanza di Struttura, poter aggiungere un'istanza di Compressione tramite addListaProprieta(compressione_1);
codice:
void Struttura::addListaProprieta(Proprieta proprieta)
{
    this->lista_proprieta.push_back(proprieta);
}

std::list<Proprieta> Struttura::getListaProprieta()
{
    return this->lista_proprieta;
}
Mi è chiaro che deve esserci una relazione, oltre che quella di generalizzazione, tra la classe Proprieta e Compressione. Si utilizzano le classi astratte? Se si come? E nel caso posso comunque definire i metodi di Proprieta che poi saranno ereditati dalla classe Compressione? O li devo per forza definire in Compressione?

Grazie,
ciao.