thisポインタがメンバ関数を呼び出したオブジェクトのアドレスを取得するものであることは、教科書を読んで分かりました。しかし、これにいったい何のメリットや意味があるのか、今の私には分かりません。どなたか分かりやすく教えていただけないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
cpp
1class Foo { 2public: 3 int func(int x) { 4 // ... 5 } 6};
なるクラスがあったとして、これを main の中で
cpp
1int main() { 2 Foo foo; 3 int answer = foo.func(42); 4}
と呼び出すとしましょう。呼び出し foo.func(42)
に現れる foo
も引数 42
と共にメソッド Foo::func()
に暗黙的に渡されていることをまず理解するとよいです。
Foo::func
の実装コードで暗黙的に渡された foo
にアクセスする手段が this
です。オブジェクトそのものではなく、ポインタで渡すのは C++ では普通の所作ですね。
投稿2018/03/02 01:32
総合スコア936
0
this
がポインタなのはC++ぐらいなので、それを前提に回答します(違ったらお知らせください)。
本来、オブジェクト指向の言語でメンバ変数やメンバ関数にアクセスする場合、どのオブジェクトのものか特定しないと一意にアクセスできません。C++の場合は、暗黙にthis
を前提としてアクセスしますので、コードに自分から書くことはあまりありませんが、見えない引数としては渡されています(MSDN)。
一方で、JavaScriptではthis.
を明示しないとメンバを参照できないですし、PythonやPerlではself
もただの第1引数です。
投稿2018/03/02 00:43
編集2018/03/02 00:44総合スコア145184
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/02 01:09
2018/03/02 01:10
2018/03/02 01:11
2018/03/02 01:11
2018/03/02 01:11
2018/03/02 01:16
2018/03/02 01:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。