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?
答案 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*
,则调用代码应该与D1
和D2
中的实现无关,因此不应该我需要知道哪一个实际上被称为。