Menu
CoddyTech

this 指针

本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 7 课,共 104 课。

在 C++ 中,this 是指向当前对象的指针。使用 this-> 访问成员,尤其是在参数名称与成员名称相同时。

没有 this 时,参数会遮蔽成员:在方法内部,name 表示参数,它会隐藏同名成员。因此,name = name 只会将参数赋值给它自身。

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

挑战

中等

使用 this-> 实现 Player 类的方法,以区分同名的成员和参数:

  • Setter 方法:使用 this-> 将参数赋值给成员
  • getStatus():使用 this-> 访问成员,返回 "<name> - Score: <score>, Level: <level>"

亲手试试

#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自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C++ 在线编译器