如果该函数在2个以上的派生类中定义,如何从基类调用纯虚函数

时间:2016-03-28 12:58:33

标签: c++

class Base
{

    public:
    void func();
    void pureFunc()=0;

};

void Base::func()
{

    pureFunc();

}

另一个档案

#include "base.h"
class D1: public Base
{

    void pureFunc()
    {
    cout << "D1";
    }

};

在另一个档案中

#include "base.h"
class D2: public Base
{

    void pureFunc()
    {
    cout << "D2";
    }

};

在基类中调用哪个类的pureFunc?

2 个答案:

答案 0 :(得分:1)

宣言应为 virtual void pureFunc()=0=0才有意义。

然后它取决于您实例化的类。如果您创建D2

D2 d2{};

然后Base指针将调用D2::pureFunc(),例如:

Base* bptr = &d2;
bptr->pureFunc(); // calls D2::pureFunc()

但是如果您创建了指向D1的相同指针,那么相同的调用将解析为D1::pureFunc()

D1 d1{};
bptr = &d1; // same pointer now points to a D1
bptr->pureFunc(); // now calls D1:pureFunc()

答案 1 :(得分:1)

纯虚函数的重点是实际将具体实现与抽象基类接口分离。

如果您通过pureFunc()指针或引用调用Base*,则调用代码应该与D1D2中的实现无关,因此不应该我需要知道哪一个实际上被称为。