クラスでa()
のメソッドを作成しました(正常に動作します)。そのクラスで最初のメソッドを呼び出す別のメソッドを書きたいので、
_void A::a() {
do_stuff;
}
void A::b() {
a();
do_stuff;
}
_
b()
so b(A obj)
を書き換えることができると思いますが、したくありません。 Javaでthis.a()
のようなことができますか?.
obj.b()
を実行したい場合、obj.a()
はobj.b()
の結果として呼び出されます。
それがまさにあなたがしていることです。
あなたが持っているものは問題なく動作するはずです。次の場合は、「this」を使用できます。
void A::b() {
this->a();
do_stuff;
}
または
void A::b() {
this->A::a();
do_stuff;
}
または
void A::b() {
A::a();
do_stuff;
}
しかし、あなたが持っているものも動作するはずです:
void A::b() {
a();
do_stuff;
}
ブロックで作成したコードは問題なく動作するようです。クラス内でa()とb()の両方のメソッドが適切に定義されていることを確認してください。
わずかに予期しない結果になる可能性のあるケースが1つあります。つまり、A::a()
が仮想であり、obj
が実際にDerivedFromA
型を持ち、DerivedFromA :: aが_A::a
_をオーバーライドする場合です。その場合、単純な呼び出しa();
またはより冗長なthis->a();
は、A :: aではなく、DerivedFromA :: a()を呼び出します。
クラスAはa()=を仮想と宣言しているため、これはおそらく意図されています。しかし、実際にそれを意味しない場合は、次のように呼び出しを記述して仮想を無視できます。
_void A::b()
{
A::a(); // or
this->A::a(); //Both ignore the virtual-ness of a()
}
_
そこに書いたものはうまくいくはずです。 C++では、a
内でb
を呼び出し、両方がいくつかのクラスA
のインスタンスメソッドである場合、修飾する必要はありません。 a
とb
は両方とも互いのスコープ内にあります。