Обмен технологиями

[С]Пакет

2024-07-12

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

1. Определение упаковки

Инкапсуляция — одна из трех основных особенностей объектно-ориентированного программирования (ООП) (инкапсуляция, наследование, полиморфизм). Речь идет об объединении данных (свойств) и методов (функций) для работы с этими данными в независимую единицу (класс), максимально скрывающую внутренние детали объекта и открывающую внешний мир только интерфейс. Целью этого является защита данных объекта, предотвращение прямого доступа внешнего кода к внутренним структурам данных объекта, уменьшение количества ошибок и упрощение сложности.

2. Назначение упаковки

  1. скрытие данных: защитить данные объекта от прямого внешнего доступа и предотвратить несанкционированное изменение данных.
  2. Понятный интерфейс: Предоставляя ограниченные интерфейсы (методы), внешний код может взаимодействовать с объектом только через эти интерфейсы, тем самым проясняя поведение объекта.
  3. Модульный: инкапсулируйте связанные данные и операции вместе, чтобы улучшить модульность и возможность повторного использования кода.

3. Методы реализации инкапсуляции в C++

  1. Использование класса : При определении класса установите элементы данных (свойства) как частные или защищенные, а методы работы с этими данными установите как общедоступные. Таким образом, внешний код не может напрямую получить доступ к закрытым членам класса, а может получить к ним доступ только косвенно через общедоступные методы.

  2. модификатор доступа

    • public: Доступен с помощью любого внешнего кода.
    • protected: Доступен только в самом классе и производных классах (подклассах).
    • private: Доступен только внутри самого класса, а не производных классов.
  3. Конструктор и деструктор : инициализировать объект с помощью конструктора и очистить ресурсы, занятые объектом, с помощью деструктора. Они также являются частью инкапсуляции, поскольку контролируют жизненный цикл объекта.

4. Пример

Ниже приведен простой пример оболочки C++, показывающийRectangleРеализация (прямоугольного) класса.

  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. }

В этом примереRectangleобщийwidthиheight Свойства становятся частными, и внешний код не может получить к ним прямой доступ.Вместо этого мы используем общедоступные методы, такие какsetWidthgetHeightиgetArea ) для доступа и изменения этих частных свойств. Этот метод реализует инкапсуляцию данных и предоставляет понятный интерфейс для внешнего использования.