В этой статье я попытаюсь разъяснить Вам основы объектно ориентированного программирования.
Структуры и классы
Как говорилось ранее, структуры предназначены для объединения данных. Будем считать, что классы используются для объединения данных и функций. Хотя на самом деле в большинстве случаев структуры можно использовать так же, как и классы. Формально разница между структурами и классами в том, что по умолчанию все члены класса закрыты, а структуры — открыты.
Объекты программы и объекты реального мира
Чаще всего объекты, которые используются в программе, представляют собой реальные физические объекты. В таких ситуациях проявляется взаимодействие между программой и реальным миром.
Простой класс
В следующем примере описана методика создания класса и двух объектов, а также продемонстрированы синтаксис и основные черты классов в С + +.
// smallobj.cpp // демонстрирует простой объект #include <iostream> using namespace std; ////////////////////////////////////////////////////////// class smallobj // определение класса { private: int somedata; // поле класса public: void setdata(int d)// метод класса, который изменяет значение поля { somedata = d; } void showdata() // метод, который отображает значение поля { cout << "Значение поля равно " << somedata << endl; } }; ////////////////////////////////////////////////////////// int main() { smallobj s1, s2; // создание двух объектов класса smallobj s1.setdata(1066); // вызовы метода setdata() s2.setdata(1776); s1.showdata(); // вызовы метода showdata() s2.showdata(); return 0; }
Результат работы программы выглядит следующим образом:
Значение поля равно 1076 Значение поля равно 1776
Определение класса
Определение класса в программе выглядит следующим образом:
class smallobj { private: int somedata; public: void setdata(int d) { somedata = d; } void showdata() { cout << "Значение поля равно " << somedata << endl; } };
Определение начинается с ключевого слова class, за которым следует имя класса. В данном случае это имя — smallobj. Подобно структуре, тело класса заключено в фигурные скобки, после которых нужно ставить точку с запятой (;) (конструкции, связанные с типами данных, такие как структуры или классы, нуждаются после своего тела в наличии точки с запятой в отличие от конструкций, связанных с передачей управления, например, функций или циклов).
Модификаторы доступа private и public (сокрытие данных)
Ключевым принципом объектно-ориентированного программирования является возможность скрытия данных. Этот термин понимается в том плане, что данные размещаются в классе и защищены от несанкционированного доступа к функциям, которые размещены вне класса. Если необходимо защитить любые данные, то их размещают внутрь класса с ключевым словом private. Такие данные доступны только внутри класса. Данные, описанные с ключевым словом public, наоборот, доступны за пределами класса.
Сокрытие данных означает ограждение данных от тех частей программы, которые не имеют необходимости использовать эти данные. В более узком смысле это означает сокрытие данных одного класса от другого класса. Сокрытие данных позволяет уберечь опытных программистов от ошибок. Программисты могут сами создавать средства для доступа к закрытым данным, что значительно снижает возможность случайного или некорректного доступа к ним.
Данные класса
Класс smallobj содержит всего одно поле данных somedata, имеющее тип int. Данные, которые находятся внутри класса, называются данными-членами или полями класса. Количество полей класса, как и структуры, теоретически может быть любым. Поскольку перед описанием поля somedata стоит ключевое слово private, это поле доступно только внутри класса.
Методы класса
Метод класса – функция, входящая в состав класса. Класс smallobj включает два метода: setdata() и showdata(). Как правило, скрывая данные класса, его методы оставляют доступными. Это объясняется тем, что данные скрывают с целью избежать нежелательного внешнего воздействия на них, а функции, работающие с этими данными, должны обеспечивать взаимодействие между данными и внешней по отношению к классу частью программы.
Поскольку оба метода описаны с ключевым словом pubic, они доступны за пределами класса.
Таким образом, метод setdata () принимает аргумент и присваивает полю somedata значение, равное значению аргумента. Второй метод, showdata (), отображает на экране значение поля somedata.
Использование класса
Теперь, когда класс определен, его можно использовать в функции main(). В первой строчке функции
smallobj s1, s2;
создаются два объекта класса smallobj — s1 и s2. Создание объекта подобно созданию переменной: оно означает выделение памяти, необходимой для хранения объекта.
Следующие строчки осуществляют вызов метода setdata():
s1.setdata(1066); s2.setdata(1776);
Как видно, доступ к методам класса возможен только через конкретный объект этого класса. Для того, чтобы получить этот доступ, необходимо использовать операцию точки (.), которая связывает метод с именем объекта. Синтаксически это напоминает доступ к полям структуры, но скобки после имени метода свидетельствуют о том, что выполняется вызов функции.
Получайте новые статьи блога прямо себе на почту