Ключевое слово private
Ключевое слово private используется в теле класса
для указания того, что следующие за ним члены класса
являются закрытыми. К закрытым членам можно обращаться
только из методов самого класса или из дружественных
функций и классов. Снаружи класса прямой доступ к таким
членам запрещен. Это один из ключевых механизмов
инкапсуляции в C++.
Если в классе не указан ни один спецификатор доступа,
то по умолчанию все его члены являются закрытыми.
Ключевое слово private может использоваться
как для полей, так и для методов класса.
Синтаксис
class ClassName
{
private:
// закрытые поля и методы
public:
// открытые поля и методы
};
Пример
Давайте создадим класс Counter, в котором
счетчик будет закрытым полем, а доступ к нему
будет осуществляться через открытые методы:
#include <iostream>
using namespace std;
class Counter
{
private:
int count;
public:
Counter() : count(0) {}
void increment()
{
count++;
}
int getCount()
{
return count;
}
};
int main()
{
Counter c;
c.increment();
c.increment();
c.increment();
cout << c.getCount() << endl;
return 0;
}
Результат выполнения кода:
3
Пример
Давайте попробуем обратиться к закрытому полю
напрямую из функции main. Такой код
не скомпилируется, потому что поле count
является закрытым:
#include <iostream>
using namespace std;
class Counter
{
private:
int count;
public:
Counter() : count(0) {}
};
int main()
{
Counter c;
// c.count = 5; // ошибка: count is private
return 0;
}
Компилятор выдаст ошибку, так как прямой доступ
к закрытому полю count извне класса
запрещен.
Пример
Давайте создадим класс BankAccount, в котором
баланс хранится в закрытом поле, а пополнение и снятие
средств выполняются через открытые методы с проверками:
#include <iostream>
using namespace std;
class BankAccount
{
private:
int balance;
public:
BankAccount(int initial) : balance(initial) {}
void deposit(int amount)
{
if (amount > 0)
{
balance += amount;
}
}
bool withdraw(int amount)
{
if (amount > 0 && amount <= balance)
{
balance -= amount;
return true;
}
return false;
}
int getBalance()
{
return balance;
}
};
int main()
{
BankAccount acc(100);
acc.deposit(50);
bool res = acc.withdraw(30);
cout << res << endl;
cout << acc.getBalance() << endl;
return 0;
}
Результат выполнения кода:
1
120