Menu
CoddyTech

Con trỏ this

Thuộc phần Lập trình hướng đối tượng trong hành trình C++ của Coddy. Bài học 7 trên 104.

Trong C++, this là con trỏ trỏ đến đối tượng hiện tại. Dùng this-> để truy cập các thành viên, đặc biệt khi tên tham số trùng với tên thành viên.

Nếu không có this, tham số che khuất thành viên: bên trong phương thức, name chỉ tham số, khiến thành viên trùng tên bị che khuất. Vì vậy, name = name chỉ gán tham số cho chính nó.

void Player::setName(std::string name) {
    name = name;  // Gán tham số cho chính nó! Biến thành viên không đổi.
}

Dùng this-> để gán giá trị chính xác

void Player::setName(std::string name) {
    this->name = name;  // Gán tham số cho biến thành viên
}

Sử dụng this-> trong các phương thức

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

Con trỏ this luôn trỏ đến đối tượng hiện tại. Khác với Java và C#, nơi this là một tham chiếu, trong C++, nó là một con trỏ, vì vậy bạn dùng -> thay vì . để truy cập các thành viên.

challenge icon

Thử thách

Trung bình

Triển khai các phương thức của lớp Player, dùng this-> để phân biệt thành viên và tham số có cùng tên:

  • Các phương thức setter: dùng this-> để gán tham số cho thành viên
  • getStatus(): dùng this-> để truy cập thành viên, trả về "<name> - Score: <score>, Level: <level>"

Tự làm thử

#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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C++ online