覆盖虚函数的C ++基类Class ::方法

时间:2012-07-18 20:40:26

标签: c++ oop

如果我有以下虚拟事件的覆盖:

void derivedClass::method(event)
{

   // my stuff

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

}

//&lt; ---行做什么?它叫什么?我不认为它调用基类的方法,因为它是虚拟的(所以没有主体)

3 个答案:

答案 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。由于使用了限定名称,因此该方法是虚拟的这一事实绝对没有任何意义,并且没有任何区别。