コードで使用する 2 つの構文 (this->...
および修飾名) は、名前の非表示、テンプレート基本クラスなど、あいまいさやその他の名前検索の問題がある場合にのみ必要です。
あいまいさやその他の問題がない場合は、これらの構文は必要ありません。必要なのはWrite
、例のように単純な非修飾名だけです。ただWrite
、そうではなく、そうではthis->Write
ありませんFoundation::Write
。についても同様mWords
です。
つまり、あなたの特定の例では、平野Write( mWords )
はうまく機能します。
上記を説明するために、次のようにDoSomething
メソッドにmWords
パラメーターがある場合
DoSomething(int mWords) {
...
次に、このローカルmWords
パラメーターは継承されたクラスメンバーを非表示にしmWords
、いずれかを使用する必要があります
DoSomething(int mWords) {
Write(this->mWords);
}
また
DoSomething(int mWords) {
Write(Foundation::mWords);
}
自分の意図を適切に表現すること、つまり、隠れているところを突破することです。
次のように、Child
クラスにも独自のmWords
メンバーがある場合
class Child : public Base, public Foundation
{
int mWords
...
この名前は、継承された を非表示にしmWords
ます。この場合のthis->mWords
アプローチは、適切な名前を再表示するのに役立ちません。問題を解決するには、修飾名を使用する必要があります
DoSomething(int mWords) {
Write(Foundation::mWords);
}
次のように、両方の基本クラスにmWords
メンバーがある場合
class Base {
public:
std::string mWords;
...
};
class Foundation {
public:
int mWords;
...
その場合Child::DoSomething
、mWords
名前があいまいになり、あなたがしなければならないでしょう
DoSomething(int mWords) {
Write(Foundation::mWords);
}
あいまいさを解決します。
しかし、繰り返しになりますが、あなたの特定の例では、あいまいさがなく、名前が隠されているため、これは完全に不要です。