2017-05-31 10 views
-3

親メンバー関数内で使用される仮想関数の動作については疑問があります。C++親メンバー関数内の仮想関数の振る舞い

class A { 
private: 
    vars; 
    virtual fn_v() {.....} 
public: 
    fn_A() { 
    fn_v(); 
    .... 
    } 

class B : public A { 
    .... 
public: 
    fn_v() {.....} 

私は仮想関数の実装が呼び出されるBのオブジェクトからfn_A()を呼びますか?

+3

です。ポインターまたはベースの 'A'クラスへの参照を介して関数を呼び出しますか?このポインタまたは参照は実際には 'B'クラスのインスタンスへのポインタまたは参照ですか?その後、 'B :: fn_v'関数を呼び出す必要があります。 –

+7

あなたはそれを試してみませんか? –

+0

クラスBの汎用オブジェクトです。 – PSK

答えて

0

仮想関数の実装が呼び出されるBのオブジェクトからfn_A()を呼び出すとどうなりますか?

Bの1つです。これが仮想関数の意味です。メソッドが呼び出されるオブジェクトが仮想メソッドをオーバーライドするクラスである場合、オーバーライドが呼び出されます。これはむしろ基本的なものです。

+0

それは間接呼び出しでも機能しますか?そうだね... –

+1

@PaulStelian「間接呼び出し」というものが何を意味するのかよく分かりませんが、メソッドが呼び出されたオブジェクトが仮想メソッドをオーバーライドするクラスである場合はいつでも動作します。私はそれよりも明白ではありません。 – EJP