Question

Le mot Let j'écris une application qui fonctionne avec des projets, et expose des fonctionnalités différentes en fonction du type du projet. J'ai une hiérarchie de classes pour les différents types de projets:

class AbstractProject
{
};

class ProjectA : public AbstractProject
{
};

class ProjectB : public AbstractProject
{
};

class ProjectC : public AbstractProject
{
};

Maintenant, je comptais avoir un pointeur AbstractProject * _currentProject en tant que membre de la classe principale, affiche une boîte de dialogue de l'application au démarrage et en fonction de la sélection, faites:

_currentProject = new ProjectB(); // e.g.

Plus tard, je vais devoir downcaster le pointeur sur le type spécifique d'utiliser la fonctionnalité spécifique aux différents projets-s. D'une certaine façon cela me fait mal à l'aise. Y at-il une meilleure façon de le faire?

Était-ce utile?

La solution

Une meilleure façon est de définir des méthodes virtuelles pures dans la classe de base, puis mettre en œuvre toutes les fonctionnalités spécifiques dans les classes dérivées dans les surcharges. Ensuite, appelez cette méthode.

Autres conseils

Oui, vous devez utiliser des méthodes virtuelles à la place, chaque fois que possible.

Le commandement et le modèle des visiteurs peuvent aussi bien appliquer ici. Vous devez décider par vous-même qui est mieux adaptée à votre cas.

http://en.wikipedia.org/wiki/Command_pattern

http://en.wikipedia.org/wiki/Visitor_pattern

En pur OO, vous devriez avoir des méthodes virtuelles comme tout le monde suggéré. Toutefois, si vous avez encore besoin d'aller pour les fonctions de membres spécifique, essayez d'utiliser l'un des modèle de conception, peut être commande ou visiteur ou même décorateur ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top