基类中的虚方法和子类中的非virtula方法。仍然如何调用子类方法,即使它是非虚方法

时间:2017-06-09 10:15:08

标签: c++ inheritance polymorphism override virtual-functions

我正在浏览下面提到的一段代码,发现子类中的方法是非虚拟的,但该方法仍然被其基类指针调用。谁能告诉我为什么...... ??

class Base {
    virtual void method() { std::cout << "from Base" << std::endl; }
public:
    virtual ~Base() { method(); }
    void baseMethod() { method(); }
};

class A : public Base {
    void method() { std::cout << "from A" << std::endl; }
public:
    ~A() { method(); }
};


int main(void) {
    Base* base = new A;
    base->baseMethod();     
    getchar();
    return 0;       
}

输出 - 来自A

1 个答案:

答案 0 :(得分:1)

派生类中覆盖虚方法的方法也是virtual;它与关键字virtual的使用与否无关。

  

然后Derived类中的这个函数也是虚函数(无论关键字virtual是否在其声明中使用)并覆盖Base :: vf(无论是否在其声明中使用了单词override)。