仮想イベントの次のオーバーライドがある場合:
void derivedClass::method(event)
{
// my stuff
baseClass::method(event); // <--
}
// <---行は何をしますか?それは何と呼ばれますか?これは仮想であるため(本体がないため)、基本クラスのメソッドを呼び出すとは思いません。
あなたが示唆しているように、それは基本クラスのメソッドを呼び出します。それが仮想であるという事実は、それがオーバーライドされ、基本クラスへのポインター/参照から派生クラスのメソッドにアクセスできることを意味するだけです。
その理由は、例で簡単にわかります。
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()
。
ここに、仮想メソッドに関する優れたリファレンスがあります。
基本クラスのメソッドを呼び出します。はい、派生メソッドは「多態的に」呼び出されていますが、次を使用して基本メソッドを呼び出すことができます。Base::method
クラスメソッド呼び出しで修飾名( )が使用されている場合、メソッドは非仮想的に直接呼び出されます。あなたの例では、が呼び出されます。修飾名が使用されているため、メソッドが仮想であるという事実はまったく意味がなく、何の違いもありません。<class name>::<method name>
baseClass::method