Pouvez-vous m'expliquer pourquoi le friend
mot-clé est préféré pour donner des droits d'accès aux données privées de la classe?
Pouvez-vous m'expliquer pourquoi le friend
mot-clé est préféré pour donner des droits d'accès aux données privées de la classe?
Réponses:
Friend est la manière classique d'étendre l'interface d'une classe.
Mais la grande chose est que cet ami documente explicitement votre intention de lier étroitement des éléments spécifiques à une classe.
Remarque: En utilisant un ami, vous liez étroitement les amis à la classe.
Un exemple parfait est les opérateurs de flux en C ++
class Plop
{
private:
int value;
friend std::ostream& operator<<(std::ostream& stream, Plop const& data);
friend std::istream& operator>>(std::istream& stream, Plop& data);
};
std::ostream& operator<<(std::ostream& stream, Plop const& data)
{
return stream << data.value << " ";
}
std::istream& operator>>(std::istream& stream, Plop& data)
{
return stream >> data.value;
}
Ici, nous étendons l'interface publique de la classe Plop d'une manière qui nous permet de diffuser l'objet dans et hors d'un flux, mais sans exposer l'implémentation interne ni provoquer de futurs maux de tête d'implémentation en exigeant l'utilisation de méthodes get / set qui doivent être maintenus (car ils feraient partie de l'interface publique) même si l'implémentation interne est modifiée.
Remarque: Cela ne rompt PAS l' encapsulation, mais il lie étroitement les opérateurs de flux à l'implémentation de la classe Plop (c'est-à-dire que toute modification de l'implémentation de la classe Plop nécessitera une modification de l'implémentation des opérateurs de flux). Mais cela est attendu. Toutes les parties de l'interface publique (y compris les méthodes publiques / protégées) sont étroitement liées à l'implémentation.
Mais Remarque: Vous avez explicitement documenté cette liaison dans le cadre de la déclaration de classe.
Remarque: je ne ferais pas référence à un ami comme moyen préféré d'exposer des données privées. La surutilisation d'un ami peut être aussi mauvaise que d'exposer la mise en œuvre. Comme toutes les fonctionnalités du langage, il doit être utilisé judicieusement.
friend
été préféré, quelles autres façons utilisez-vous habituellement pour accéder aux données de cours privés de l'extérieur?