2011-02-08 14 views
4

は、次のことを考えてみましょう:C++で同じクラスの別のメンバー関数内から呼び出すメンバ関数、客観C

class A{ 

    //data members 

    void foo() 
    { 
     bar();//is this possible? or should you say this->bar() note that bar is not static 
    } 
    void bar() 
    { 

    } 
}//end of class A 

あなたは別の内からメンバ関数を呼び出すにはどうすればよいですか?静的関数は「this」の使用にどのように影響しますか? オブジェクトに対して関数を呼び出す必要がありますか?

答えて

4

Nawazは正しいです: 'this'は暗黙的です。 1つの例外は、fooが静的関数である場合です。静的関数では 'this'がないからです。その場合、bar()も静的関数でなければbar()を使うことはできませんし、this-> bar()を使うこともできません。

+0

また、現在のスコープに自動的に持ち込まれていないベースの非スタティックメンバーを呼び出し、 'using'ステートメントで明示的に行っていない奇妙なケースもありますが、ポスターは明らかに簡単なものになります心配して。 –

+0

@トニー:あなたはそれらの奇妙な事例を詳しく教えていただけますか? – Namratha

+0

@Namratha:これまで注目してきたことはありません。コンパイラが正確な問題を覚えているのではなく、あいまいな思い出から苦情を受けたときに認識して修正することのほうが、派生クラスに関数x()という名前のクラスは、明示的に 'using'で要求されない限り、ベースクラスのテンプレートx()はスコープに入れません。 –

2
bar();//is this possible? or should you say this->bar() 

thisは暗黙的です。両方とも同等です。それらのいずれかを使用することができます。しかし、私は考えると、ちょうどbar()で十分なら、なぜ使用this->bar()

あいまいさがある場合にのみthisを使用してください。そうでない場合は、より単純なものを使用してください。

+0

静的関数でない場合は、関数呼び出しbar()を使用できますか?オブジェクトのバーを呼び出す必要はありませんか? – Namratha

+0

@Namratha:自分自身を繰り返さないのですか?私はそれらの両方が同等であるとは言いませんでしたか? 'bar()'が呼び出されているかどうか、いくつかのコードを書いて自分自身を見てみませんか? – Nawaz

+2

答えが明確でないため、いいえ。あなたは静的なキーワードと、関数がオブジェクトに対して呼び出されなければならないときに私の質問に答えていません。 – Namratha

関連する問題