Указатель this и инкапсуляция
Используйте указатель this и обеспечивайте инкапсуляцию с помощью доступа private и public.
«Указатель this и инкапсуляция» — бесплатный урок C++ Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Что такое this?
Внутри нестатической функции-члена this — это неявный указатель на текущий объект. Используйте его, чтобы устранить неоднозначность или вернуть ссылки.
class Counter {
int n_ = 0;
public:
Counter& add(int x) {
n_ += x; // implicit this
return *this; // chain calls
}
};Неявный доступ
Обычно нет необходимости писать this->. Имена членов находятся автоматически — this->n_ и n_ эквивалентны.
Когда требуется this->
Используйте this->, когда параметр скрывает член или когда поиску имен в шаблоне нужна помощь для обнаружения унаследованных членов.
class Person {
std::string name_;
public:
void setName(const std::string& name) {
this->name_ = name; // or name_ = name;
}
};Возврат *this для объединения вызовов
Возвращайте *this, чтобы поддерживать цепочки вызовов.
class StringBuilder {
std::string s_;
public:
StringBuilder& append(const std::string& part) {
s_ += part;
return *this;
}
};
StringBuilder sb;
sb.append("Hello, ").append("World!");this в константных методах
Внутри метода const тип this — const ClassName*. Изменять члены через него нельзя.
Инкапсуляция: основная идея
Инкапсуляция означает сокрытие внутреннего состояния и предоставление только безопасных операций. Сделайте данные закрытыми, а намеренно выбранные общедоступные методы — доступными извне.
class Stack {
std::vector<int> data_; // hidden
public:
void push(int v) { data_.push_back(v); }
int pop() { int v = data_.back(); data_.pop_back(); return v; }
bool empty() const { return data_.empty(); }
};Зачем нужна инкапсуляция
Инкапсуляция позволяет вам:
- изменять внутреннее представление, не нарушая работу вызывающего кода
- проверять инварианты в одном месте
- проверять входные данные на границе
- локально анализировать состояние объекта
Общедоступный интерфейс = контракт
Общедоступный интерфейс — это обещание вызывающему коду. Делайте его минимальным, продуманным и стабильным. Детали реализации должны быть закрытыми.
Методы получения и установки
Распространенный шаблон, которым легко злоупотребить. Не создавайте методы get/set для каждого члена — это нарушает инкапсуляцию. Предоставляйте операции, а не поля.
Константная корректность: еще раз
Помечайте каждый метод, который только читает данные, как const. Вызывающий код видит, какие методы безопасно вызывать для константных экземпляров, а компилятор это контролирует.
Дружественные функции и классы
Ключевое слово friend предоставляет другой функции или классу доступ к закрытым членам. Используйте его умеренно — оно усиливает связанность.
class Account {
double balance_;
friend void transfer(Account& a, Account& b, double amount);
};Быстрая проверка
Каков тип this внутри метода, объявленного как void f() const, класса Foo?
Итоги
this указывает на текущий объект внутри нестатических методов. Используйте его для объединения вызовов (return *this) и устранения неоднозначности. Инкапсулируйте состояние с помощью закрытых данных и небольшого продуманного общедоступного интерфейса.
Часто задаваемые вопросы
Урок «Указатель this и инкапсуляция» бесплатный?
Да — полный текст урока «Указатель this и инкапсуляция» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Указатель this и инкапсуляция»?
Используйте указатель this и обеспечивайте инкапсуляцию с помощью доступа private и public. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Указатель this и инкапсуляция»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- struct и class: когда что использовать
- Переменные-члены и методы
- Конструкторы и списки инициализации членов
- Указатель this и инкапсуляция