私は C++ を学習しようとしていますが、使用しているチュートリアルでこの紛らわしい例に出くわしました。おそらく誰かがこれを明確にしてくれます。
次のコードはチュートリアルからのものです。// <---
私が混乱している部分を示す「タグ」を付けました。
#include <iostream>
using namespace std;
class CDummy {
public:
// signature: accepts an address
int isitme (CDummy& param);
};
// actual function that accepts an address passed in from main set to
// the param variable
int CDummy::isitme (CDummy& param) // <--- 1
{
ここで、紛らわしい部分が発生します。アドレス変数のアドレスを取得しています??? アドレスはすでに渡されていませんでしたか?
if (¶m == this) return true; // <--- 2
else return false;
}
int main () {
CDummy a;
CDummy* b = &a;
// passes in the class
if ( b->isitme(a) )
cout << "yes, &a is b";
return 0;
}
以下は、私にとって意味のあるコードです
#include <iostream>
using namespace std;
class CDummy {
public:
int isitme (CDummy *param);
};
int CDummy::isitme (CDummy *param) // <--- 1
{
この部分は完全に理にかなっています。param はポインターであり、クラス a のポインターとクラス b のポインターを比較しています。
if (param == this) return true; // <--- 2
else return false;
}
int main () {
CDummy a;
CDummy *b = &a;
// pass in the address.
if ( b->isitme(&a) )
cout << "yes, &a is b";
return 0;
}
コード サンプルのうち、正しいものはどれですか? どちらも機能するため、これが推奨される方法であるという意味で正しいです。また、最初の例でアドレスのアドレスを取得しているのはなぜですか?
これが以前に回答されている場合は申し訳ありませんが、見つけることができませんでした。ありがとう