exemple:
une classe de vecteurs unitaires.
une classe contenant une longue string, et une valeur de hachage associée. A chaque fois que tu touches à la string, il faut mettre à jour la valeur de hachage.
Une image. Tu ne peux pas changer la hauteur et la largeur sans avoir à réallouer la mémoire, ou accepter de valeurs négatives.
Deuxième intérêt:
Avoir plusieurs implémentations de la même chose.
Si on revient aux vecteurs unitaires. on peut implémenter ça avec deux angles alpha et beta, et on peut avoir les fonctions GetX, GetY et GetZ qui fonctionne correctement.
Comme ça si on trouve une meilleure méthode, on peut l'implémenter sans bouziller le reste du code.
De même, si on fait des templates, on veut que les classes utilisées en paramètre supportent un certain nombre de crières. Le plus possible, ces critères sont l'impléméntation de fonctions, plutôt que la présence de données.
En ccl, pas besoin de cacher les données pour un type
class Vector3D
{
public:
float x,y,z;
...
};
on pourrait même mettre une struct.
mais pour les classes plus complexes, il faut songer à la manière dont on veut qu'elles soient utilisées et créer une interface, puis l'implémenter.
on peut donc faire du genre
class InterfaceImage
{
des fonctions du genre GetW Get Y, operator [] (x,y)pour accéder à un pixel...
};
class ImageComp: public InterfaceImage
{
là des données private
et l'implémentation public de l'interface
};
class ImageRapide: public InterfaceImage
{
idem
};
et comme ça c'est propre et stable.
J'espère avoir été assez clair,
Always C++