Menu
Coddy logo textTech

Указатель 'this'

Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 7 из 104.

В C++ this — это указатель на текущий объект. Используйте this-> для доступа к членам, особенно когда имена параметров совпадают с именами членов.

Без this параметр скрывает поле класса

void Player::setName(std::string name) {
    name = name;  // Присваивает параметр самому себе! Поле класса не изменяется.
}

Использование this-> для правильного присваивания значений

void Player::setName(std::string name) {
    this->name = name;  // Присваивает параметр члену класса
}

Использование this-> в методах

std::string Player::getStatus() {
    return this->name + " - Score: " + std::to_string(this->score);
}

Указатель this всегда указывает на текущий экземпляр объекта. В отличие от Java и C#, где this является ссылкой, в C++ это указатель, поэтому для доступа к членам вы используете -> вместо ..

challenge icon

Задание

Средне

Реализуйте методы класса Player, используя this->, чтобы различать члены класса и параметры с одинаковыми именами:

  • Методы-сеттеры: используйте this-> для присвоения значений параметров членам класса
  • getStatus(): используйте this-> для доступа к членам класса, возвращайте "<name> - Score: <score>, Level: <level>"

Шпаргалка

В C++, this — это указатель на текущий объект. Используйте this-> для доступа к членам, особенно когда имена параметров совпадают с именами членов.

Без this параметр перекрывает член класса:

void Player::setName(std::string name) {
    name = name;  // Assigns parameter to itself! Member unchanged.
}

Использование this-> для правильного присваивания значений:

void Player::setName(std::string name) {
    this->name = name;  // Assigns parameter to member
}

Использование this-> в методах:

std::string Player::getStatus() {
    return this->name + " - Score: " + std::to_string(this->score);
}

Указатель this всегда указывает на текущий экземпляр объекта. В отличие от Java и C#, где this является ссылкой, в C++ это указатель, поэтому для доступа к членам вы используете -> вместо ..

Попробуйте сами

#include <iostream>
#include "Player.h"

int main() {
    std::string name;
    int score, level;
    std::getline(std::cin, name);
    std::cin >> score >> level;
    
    Player player;
    player.setName(name);
    player.setScore(score);
    player.setLevel(level);
    
    std::cout << "Name: " << player.name << std::endl;
    std::cout << "Score: " << player.score << std::endl;
    std::cout << "Level: " << player.level << std::endl;
    std::cout << player.getStatus() << std::endl;
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование