'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++ではポインタであるため、メンバにアクセスするには.ではなく->を使用します。
チャレンジ
中級同じ名前のメンバとパラメータを区別するために、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;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタ引数付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ詳解Rule of Three / Five / Zeroまとめ - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () 演算子のオーバーロード型変換演算子まとめ:Matrix クラス