
Envoyé par
koala01
Je crois que tous les patterns, comme toutes les solutions "toutes faites" que l'on peut préconiser en POO doivent systématiquement être évaluées en fonctions des circonstances
Oui, c'est parce que j'en ai pris conscience que j'ai modifié ma question.

Envoyé par
koala01
le comportement des opérateurs (qui ne peuvent pas être virtuels).
Ah bon ?
GCC fait n'importe quoi alors ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <iostream>
#define PRINT std::cout << __PRETTY_FUNCTION__ << std::endl;
struct Base
{
virtual
~Base()
{}
virtual
void operator () () const
{ PRINT; }
}; // struct Base
struct Derived : public Base
{
virtual
void operator () () const
{ PRINT; }
}; // struct Derived
int main()
{
Derived()();
return 0;
} |
virtual void Derived::operator()() const

Envoyé par
koala01
Il y a des cas où il nous permettra juste de forcer celui
quiveut redéfinir le comportement à réfléchir à l'utilité de ce qu'il veut faire : Si tu as une hiérarchie de classe importante (en terme de niveaux), tu peux, pourquoi pas, décider de ne pas redéfinir le comportement en question pour certaines classe dérivées, parce que la classe parente modifie déjà le comportement de manière satisfaisante.
L'utilisateur qui ne se serait alors intéressé qu'à une classe fille trop spécialisée pourrait, tout simplement, ne pas avoir conscience du fait qu'il peut redéfinir ce comportement

Tu peux développer, s'il-te-plaît ?
Je ne vois pas très bien où tu veux en venir (pour la deuxième partie).

Envoyé par
koala01
Mais il y a, effectivement, des cas où... bah, ma foi, utiliser le NVI ne revient qu'à se faire du mal inutilement
Dans ces cas particuliers, le mieux est peut etre encore de se contenter d'une fonction virtuelle publique

Ah, ça me rassure...
Ça correspond à ce que je pensais.
Mais ça illustre encore que je n'ai pas bien saisi les cas d'utilisation de ce pattern... 

Envoyé par
koala01
NOTA: je suis d'accord avec screetch concernant les fonctions virtuelles isTypeXXX... Ce n'est pas vraiment à faire

(...)
Oui, j'ai bien compris...
Mais comme je l'ai dit après coup, ce ne sont pas des fonctions « isTypeXXX() » que je voulais écrire.
En passant, comment feriez-vous si vous aviez des services proposés par certaines classes filles et pas par les autres, et que les objets étaient manipulés via des pointeurs sur la classe de base ?
Partager