2017年10月17日
《その83》 thisポインタ と *this
thisポインタ と *this
次の Test型クラスは、整数値を一つだけ保持します。
この単純なクラスで、thisポインタ と *this について確認してみたいと思います。
class Test {
int a;
public:
Test(int a) { this->a = a; }
int get_a() const{ return a; }
Test* func1() { return this; }
const Test* func2() const{ return this; }
Test func3() { return *this; }
};
上のコードに説明を書き加えて、少し詳しく見ていきます。
#include <iostream>
class Test {
int a;
public:
Test(int a) {
this->a = a; // this はオブジェクト自分自身を指すポインタ
/*
メンバ関数(コンストラクタ)の仮引数の名前とデータメンバの名前が同じ場合、
データメンバの名前が隠されて、仮引数のほうの名前が見えることになっている。
仮引数は a で、
データメンバは this->a で
アクセスできる。
*/
}
int get_a() const{ return a;
/*
constメンバ関数なので、const Test型のオブジェクト内にあっても呼び出せる。
*/
}
Test* func1() {
return this; // this の型は Test*
/*
メンバ関数 func1 は const宣言されていないので、この this の型は Test*
*/
}
const Test* func2() const{
return this; // this の型は const Test*
/*
メンバ関数 func2 は const宣言されているので、この this の型は const Test*
*/
}
Test func3() {
return *this; // *this の型は Test
/*
*this は、メンバ関数が所属するクラスオブジェクトそのものを表す。
*/
}
};
int main() {
Test t(10);
Test* x = t.func1(); // 関数 func1 の返却値は Test*型
const Test* y = t.func2(); // 関数 func2 の返却値は const Test*型
std::cout << x->get_a() << '\n'; // 10
std::cout << y->get_a() << '\n'; // 10
Test z = t.func3(); // 関数 func3 の返却値は Test型
std::cout << z.get_a() << '\n'; // 10
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6867812
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック