Структуры данных и классы: в чём разница?
Ранее рассматривались структуры данных для описания небольших объектов. Они удобно структурируют характеристики объекта, позволяя создавать объекты с конкретными значениями. Например, можно описать структуру «дерево» или «книжка».
Классы используются для описания более крупных объектов, таких как машина, человек или дом, обладающих множеством характеристик и функционала. Человек, например, имеет имя, вес, возраст, хобби и так далее, а также функционал: ходить, прыгать, спать. Таким образом, класс описывает как характеристики, так и действия, которые может выполнять объект.
Вкратце, для небольших объектов лучше использовать структуры, для больших — классы.
Создание первого класса
Для создания класса используется ключевое слово class, за которым следует имя класса и фигурные скобки {}, завершающиеся точкой с запятой:
class Building {
};
Внутри класса можно описывать поля (переменные) и методы (функции). Для указания уровня доступа к полям и методам используются модификаторы доступа.
Модификаторы доступа
Рассмотрим модификаторы доступа: public, private и protected.
- public: Поля и методы, объявленные как public, доступны отовсюду: внутри класса, внутри объектов и извне.
- private: Поля и методы, объявленные как private, доступны только внутри класса. Доступ извне или через объекты класса запрещен.
- protected: Доступ к полям и методам, объявленным как protected, возможен внутри класса и в классах-наследниках (это будет рассмотрено в последующих уроках).
Пример класса
Пример класса Building с полями и методом:
class Building {
public:
void GetInfo() {
std::cout << "Type: " << type << std::endl;
std::cout << "Year: " << year << std::endl;
}
private:
int year;
std::string type;
};
В данном примере year и type – поля (характеристики здания), а GetInfo() – метод (вывод информации о здании). GetInfo() объявлен как public, а поля – как private.
Создание и использование объектов
Объекты создаются на основе класса:
Building school;
school.type = "School";
school.year = 2000;
school.GetInfo();
Здесь создан объект school класса Building, и установлены его характеристики. Вызов school.GetInfo() выведет информацию на экран. Обратите внимание, что напрямую обратиться к полям year и type объекта school нельзя, так как они объявлены как private.
Можно создать несколько объектов и работать с каждым из них независимо:
Building house;
house.type = "House";
house.year = 2010;
house.GetInfo();
Инкапсуляция
Принято объявлять поля класса как private, обеспечивая инкапсуляцию. Доступ к полям осуществляется через методы, например, SetData() для установки значений и GetInfo() для получения информации. Это улучшает структуру кода и предотвращает прямое изменение полей, что повышает надежность программы.
class Building {
private:
int year;
std::string type;
public:
void SetData(int y, std::string t) {
year = y;
type = t;
}
void GetInfo() {
std::cout << "Type: " << type << std::endl;
std::cout << "Year: " << year << std::endl;
}
};
В этом уроке освоены основы создания классов и объектов в C++. Классы — мощный инструмент для организации кода и моделирования реальных объектов. Инкапсуляция данных через private поля и public методы повышает надежность и безопасность кода. Понимание принципов работы с классами и объектами — важный этап в изучении C++.