如果我有以下虚拟事件的覆盖:
void derivedClass::method(event)
{
// my stuff
baseClass::method(event); // <--
}
//&lt; ---行做什么?它叫什么?我不认为它调用基类的方法,因为它是虚拟的(所以没有主体)
答案 0 :(得分: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()
的调用。
这里有一个关于virtual methods的好参考。
答案 1 :(得分:1)
它确实调用了基类方法。是的,派生方法被称为“多态”,但它可以使用Base::method
答案 2 :(得分:1)
在类方法调用中使用限定名称(<class name>::<method name>
)时,将直接调用该方法,非虚拟。在您的示例中,调用了baseClass::method
。由于使用了限定名称,因此该方法是虚拟的这一事实绝对没有任何意义,并且没有任何区别。