1

仮想イベントの次のオーバーライドがある場合:

void derivedClass::method(event)
{

   // my stuff

   baseClass::method(event); // <--

}

// <---行は何をしますか?それは何と呼ばれますか?これは仮想であるため(本体がないため)、基本クラスのメソッドを呼び出すとは思いません。

4

3 に答える 3

2

あなたが示唆しているように、それは基本クラスのメソッドを呼び出します。それが仮想であるという事実は、それがオーバーライドされ、基本クラスへのポインター/参照から派生クラスのメソッドにアクセスできることを意味するだけです。

その理由は、例で簡単にわかります。

class Base {
public:
    virtual void foo() {
        /* do some generic stuff */
    }
};

class Derived : public Base {
public:
    void foo() {
        /* do some specific stuff */

        /* if you also want to do the generic stuff,
           you can call the same method from the base class. */
        Base::foo();
    }
}

Derivedクラスの一般的なことをしたくない場合があります。次に、への呼び出しを削除しますBase::foo()

ここに、仮想メソッドに関する優れたリファレンスがあります。

于 2012-07-18T20:42:43.613 に答える
1

基本クラスのメソッドを呼び出します。はい、派生メソッドは「多態的に」呼び出されていますが、次を使用して基本メソッドを呼び出すことができます。Base::method

于 2012-07-18T20:43:05.703 に答える
1

クラスメソッド呼び出しで修飾名( )が使用されている場合、メソッドは非仮想的に直接呼び出されます。あなたの例では、が呼び出されます。修飾名が使用されているため、メソッドが仮想であるという事実はまったく意味がなく、何の違いもありません。<class name>::<method name>baseClass::method

于 2012-07-18T20:49:21.610 に答える