Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Classe abstraite ou pimpl ?

21 réponses
Avatar
Fabien LE LEZ
Bonjour,

Si je veux cacher les entrailles d'une classe, et ne montrer à son
utilisateur que les fonctions publiques, j'ai en gros le choix entre :

- l'idiome pimpl :

// .h
class C
{
public:
void f();
private:
class Implementation;
Implementation* pimpl;
};

// .cpp
void C::f()
{
pimpl-> f();
}

- l'idiome "classe de base abstraite" :

// .h
class C
{
public:
virtual void f()= 0;
};

// .cpp
class Implementation: public C
{
void f()
{
// Le code ici
}
}


Mon problème, c'est que je viens de m'apercevoir que je choisis entre
ces deux méthodes plus ou moins au hasard, suivant celle qui me vient
à l'esprit en premier.
Y a-t-il des critères rationnels pour choisir ?
Note : il s'agit généralement de classes à sémantique d'entité, non
copiables.

Merci d'avance...

1 réponse

1 2 3
Avatar
James Kanze
Marc Boyer wrote:
[SNIP des explications très claires]


Oui, en gros, moi je fait confiance au compilateur
car je le pense capable de faire mieux aue moi, et
toi tu connais assez le C++ et les compilateurs
pour savoir là ou tu seras capable de faire mieux.


Ce qui est pratiquement jamais. C'est le profiler qui me dit où
il faut toucher à quelque chose, et alors, j'expérimente jusqu'à
trouver quelque chose qui marche. Jusqu'ici, je ne suis jamais
descendu jusqu'à l'assembleur. (Depuis que je fais du C++, et
que les machines courantes ont acquis une certaine puissance.
J'ai commencé en assembleur, il y a pas mal d'années.)

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

1 2 3