Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
Классы и объекты в C++
Узнайте, как инкапсулировать данные и поведение в C++ с помощью классов и объектов, с наглядными примерами и лучшими практиками.
Зачем использовать классы?
В предыдущих уроках мы изучали функции и переменные. По мере роста проектов группировка связанных данных и операций становится необходимой для поддерживаемости и ясности. Класс позволяет объединить члены-данные и функции-члены в единую логическую единицу, обеспечивая объектно-ориентированное программирование (ООП) — фундамент современного дизайна на C++.
Иллюстрация: комната
Рассмотрим прямоугольную комнату. Нужно хранить её length, breadth и height, а также вычислять площадь и объем. С классом можно держать их тесно связанными:
class Room {
public:
double length;
double breadth;
double height;
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
Определение класса
Класс определяется ключевым словом class, за которым следует имя и тело в фигурных скобках, заканчивающееся точкой с запятой:
class ClassName {
// члены-данные
// функции-члены
};
В примере выше Room — это чертеж. Переменные внутри называются членами-данными; функции — функциями-членами.
Создание объектов
Определение класса только задает компоновку; оно не выделяет память. Объекты — конкретные экземпляры, созданные по этому чертежу:
Room room1; // один объект
Room room2, room3; // несколько объектов в одном объявлении
Объекты можно создавать где угодно — внутри функций, других классов или глобально — пока соблюдается их область видимости.
Доступ к членам
Используйте оператор точки (.) для вызова функций-членов или доступа к членам-данным:
room1.length = 5.5;
double area = room1.calculateArea();
Пример 1: расчет параметров комнаты
#include <iostream>
using namespace std;
class Room {
public:
double length;
double breadth;
double height;
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
int main() {
Room room1;
room1.length = 42.5;
room1.breadth = 30.8;
room1.height = 19.2;
cout << "Area of Room = " << room1.calculateArea() << endl;
cout << "Volume of Room = " << room1.calculateVolume() << endl;
return 0;
}
Результат
Area of Room = 1309 Volume of Room = 25132.8
Инкапсуляция: public vs private
Инкапсуляция защищает данные, контролируя доступ. Члены, объявленные как private, скрыты от внешнего мира и доступны только через публичные функции-члены.
class Test {
private:
int a;
void function1() {}
public:
int b;
void function2() {}
};
В следующем примере члены-данные приватны и инициализируются через публичный метод:
#include <iostream>
using namespace std;
class Room {
private:
double length;
double breadth;
double height;
public:
void initData(double len, double brth, double hgt) {
length = len;
breadth = brth;
height = hgt;
}
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
int main() {
Room room1;
room1.initData(42.5, 30.8, 19.2);
cout << "Area of Room = " << room1.calculateArea() << endl;
cout << "Volume of Room = " << room1.calculateVolume() << endl;
return 0;
}
Результат
Area of Room = 1309 Volume of Room = 25132.8
Дополнительное чтение
Для авторитативных рекомендаций обратитесь к стандарту ISO/IEC 14882:2023 или надежным ресурсам вроде cplusplus.com и cppreference.com.
Язык C
- Классы и объекты в C#: Фундаменты надёжного ООП
- Абстрактные классы и методы в C#: практическое руководство
- Частичные классы и методы в C#: понимание и применение
- Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
- Дружественные функции и классы в C++: мастерство контроля доступа
- Шаблоны классов в C++: практическое руководство
- Классы и объекты в Java: практическое руководство
- Структуры C++ против классов: практическое руководство для разработчиков встроенных систем
- C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
- Классы хранения в C++: область видимости, время жизни и использование