Ответ
В C++ есть три модификатора доступа, которые определяют видимость членов класса (полей и методов):
public(открытый): Члены доступны из любого места программы — извне класса, из наследников, из других функций.protected(защищенный): Члены доступны внутри самого класса и внутри классов-наследников (производных классов). Извне иерархии наследования доступ закрыт.private(закрытый): Члены доступны только внутри того класса, где они объявлены. Это самый строгий уровень инкапсуляции.
Ключевое отличие между class и struct:
По умолчанию, если модификатор не указан, в class члены являются private, а в struct — public. Это единственное синтаксическое различие.
Пример, демонстрирующий инкапсуляцию:
class BankAccount {
private: // Данные скрыты от внешнего мира
double balance;
std::string accountNumber;
protected: // Для возможного расширения в наследниках
void logTransaction(const std::string& type) {
// ... логирование
}
public: // Открытый интерфейс для клиентов
void deposit(double amount) {
if (amount > 0) {
balance += amount;
logTransaction("DEPOSIT");
}
}
double getBalance() const { return balance; }
};
int main() {
BankAccount acc;
acc.deposit(100.0); // OK: public метод
// acc.balance = 1000; // Ошибка компиляции: private член
// acc.logTransaction("test"); // Ошибка компиляции: protected метод
}
Использование private позволяет защитить инварианты класса и изменять внутреннюю реализацию, не ломая код, который использует публичный интерфейс.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶