2012-12-16 8 views
1

J'ai une classeClasses abstraites et pointeurs

// Je veux une classe abstraite.

class Foo 
{ 
    public: 
    virtual void bar()=0; 
}; 

// Je veux que ces calss abstraits soient utilisés dans tout le programme :) pour profiter du polymorphisme.

class EatFoo 
{ 
public: 
    vector<Foo> fooV; // not working 
    vector<Foo *> fooPV; 
}; 

Je reçois une erreur de temps de compilation que la classe abstraite ne peut pas être instanciée.

Oui son vrai, mais je veux vraiment ou je veux apprendre:

comment faire d'autres programmeurs « doivent - doivent » mettre en œuvre une fonction et je DONOT veulent utiliser des pointeurs dans mes programmes. [je ne sais pas pourquoi ? mais j'ai cette intuition ..]

Y at-il un motif ou quelque chose qui peut m'aider. Avec java c'est toutes les références et yup c'est faisable.

Merci.

Répondre

2

Si vous souhaitez un comportement polymorphe pour les éléments du conteneur, vous n'avez pas d'autre choix que d'utiliser des pointeurs. Pour rendre votre vie aussi facile que possible, vous devez utiliser des pointeurs intelligents, tels que shared_ptr<Foo>.

0

Votre tube digestif est juste ... en partie ...

Vous ne devriez pas utiliser des pointeurs premières:

class EatFoo 
{ 
public: 
    vector<shared_ptr<Foo> > fooV; 
}; 

Il n'y a aucun moyen en C++ d'avoir des collections d'objets abstraits.

Questions connexes