Partage de technologie

[C]Paquet

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Définition de l'emballage

L'encapsulation est l'une des trois fonctionnalités de base de la programmation orientée objet (POO) (encapsulation, héritage, polymorphisme). Il s'agit de combiner des données (propriétés) et des méthodes (fonctions) pour exploiter ces données dans une unité (classe) indépendante, en masquant autant que possible les détails internes de l'objet et en exposant uniquement l'interface au monde extérieur. Le but est de protéger les données de l'objet, d'empêcher le code externe d'accéder directement aux structures de données internes de l'objet, de réduire les erreurs et de simplifier la complexité.

2. Le but de l'emballage

  1. masquage des données: Protégez les données de l'objet contre tout accès externe direct et empêchez les données d'être modifiées illégalement.
  2. Interface claire: En exposant des interfaces limitées (méthodes), le code externe ne peut interagir avec l'objet que via ces interfaces, clarifiant ainsi le comportement de l'objet.
  3. Modulaire: Encapsuler les données et les opérations associées ensemble pour améliorer la modularité et la réutilisabilité du code.

3. Méthodes pour implémenter l'encapsulation en C++

  1. Utiliser la classe : Lors de la définition d'une classe, définissez les données membres (propriétés) comme privées ou protégées, et définissez les méthodes d'exploitation de ces données comme publiques. De cette manière, le code externe ne peut pas accéder directement aux membres privés de la classe, mais ne peut y accéder qu'indirectement via des méthodes publiques.

  2. modificateur d'accès

    • public: Accessible par tout code externe.
    • protected: Accessible uniquement dans la classe elle-même et les classes dérivées (sous-classes).
    • private: Accessible uniquement au sein de la classe elle-même, pas dans les classes dérivées.
  3. Constructeur et destructeur : Initialisez l'objet via le constructeur et nettoyez les ressources occupées par l'objet via le destructeur. Ils font également partie de l'encapsulation car ils contrôlent le cycle de vie de l'objet.

4. Exemple

Vous trouverez ci-dessous un exemple simple de wrapper C++ montrant unRectangleImplémentation de la classe (rectangulaire).

  1. #include <iostream>
  2. class Rectangle {
  3. private:
  4. double width; // 矩形的宽
  5. double height; // 矩形的高
  6. public:
  7. // 构造函数
  8. Rectangle(double w, double h) : width(w), height(h) {}
  9. // 设置宽度
  10. void setWidth(double w) {
  11. width = w;
  12. }
  13. // 获取宽度
  14. double getWidth() const {
  15. return width;
  16. }
  17. // 设置高度
  18. void setHeight(double h) {
  19. height = h;
  20. }
  21. // 获取高度
  22. double getHeight() const {
  23. return height;
  24. }
  25. // 计算面积
  26. double getArea() const {
  27. return width * height;
  28. }
  29. };
  30. int main() {
  31. Rectangle rect(5.0, 10.0);
  32. std::cout << "Rectangle area: " << rect.getArea() << std::endl;
  33. rect.setWidth(7.0);
  34. std::cout << "New Rectangle area: " << rect.getArea() << std::endl;
  35. return 0;
  36. }

Dans cet exemple,Rectanglegénéralwidthetheight Les propriétés sont rendues privées et le code externe ne peut pas y accéder directement.Au lieu de cela, nous utilisons des méthodes publiques telles quesetWidthgetHeightetgetArea ) pour accéder et modifier ces propriétés privées. Cette méthode implémente l'encapsulation des données et fournit une interface claire pour une utilisation externe.