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 回答