Все программы на C ++ состоят из следующих двух основных элементов:
-
Программные операторы (код) — это часть программы, которая выполняет действия, и они называются функциями.
-
Данные программы. Данные — это информация о программе, на которую влияют функции программы.
Программные операторы (код) — это часть программы, которая выполняет действия, и они называются функциями.
Данные программы. Данные — это информация о программе, на которую влияют функции программы.
Инкапсуляция — это концепция объектно-ориентированного программирования, которая связывает воедино данные и функции, которые манипулируют данными, и защищает как от внешнего вмешательства, так и от неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных .
Инкапсуляция данных — это механизм связывания данных, а функции, которые их используют, и абстракция данных — это механизм раскрытия только интерфейсов и скрытия деталей реализации от пользователя.
C ++ поддерживает свойства инкапсуляции и сокрытия данных посредством создания пользовательских типов, называемых классами . Мы уже изучили, что класс может содержать частных, защищенных и открытых членов. По умолчанию все элементы, определенные в классе, являются частными. Например —
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box };
Переменные длина, ширина и высота являются частными . Это означает, что к ним могут получить доступ только другие члены класса Box, а не любая другая часть вашей программы. Это один из способов инкапсуляции.
Чтобы сделать части класса общедоступными (то есть доступными для других частей вашей программы), вы должны объявить их после открытого ключевого слова. Все переменные или функции, определенные после открытого спецификатора, доступны всем другим функциям в вашей программе.
Создание одного класса другом другого раскрывает детали реализации и уменьшает инкапсуляцию. Идеально, чтобы как можно больше деталей каждого класса было скрыто от всех других классов.
Пример инкапсуляции данных
Любая программа на C ++, в которой вы реализуете класс с открытыми и закрытыми членами, является примером инкапсуляции данных и абстракции данных. Рассмотрим следующий пример —
#include <iostream> using namespace std; class Adder { public: // constructor Adder(int i = 0) { total = i; } // interface to outside world void addNum(int number) { total += number; } // interface to outside world int getTotal() { return total; }; private: // hidden data from outside world int total; }; int main() { Adder a; a.addNum(10); a.addNum(20); a.addNum(30); cout << "Total " << a.getTotal() <<endl; return 0; }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
Total 60
Выше класс складывает числа вместе и возвращает сумму. Открытые члены addNum и getTotal являются интерфейсами с внешним миром, и пользователь должен знать их, чтобы использовать класс. Общее число закрытых членов — это то, что скрыто от внешнего мира, но необходимо для правильной работы класса.
Разработка стратегии
Большинство из нас научились делать членов класса закрытыми по умолчанию, если нам действительно не нужно их выставлять. Это просто хорошая инкапсуляция .
Это чаще всего применяется к элементам данных, но одинаково применяется ко всем элементам, включая виртуальные функции.