Menu
Coddy logo textTech

'this' ポインタ

CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 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ポインタは常に現在のオブジェクトインスタンスを指します。thisが参照であるJavaやC#とは異なり、C++ではポインタであるため、メンバにアクセスするには.ではなく->を使用します。

challenge icon

チャレンジ

中級

同じ名前のメンバとパラメータを区別するために、this->を使用してPlayerクラスのメソッドを実装してください:

  • セッターメソッド:パラメータをメンバに代入するためにthis->を使用します
  • getStatus():メンバにアクセスするためにthis->を使用し、"<name> - Score: <score>, Level: <level>"を返します

チートシート

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ポインタは常に現在のオブジェクトインスタンスを指します。thisが参照であるJavaやC#とは異なり、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腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン