我有以下类(class):

class gkLogicBrick
{
public:
    gkLogicBrick(gkGameObject* object, gkLogicLink* link, const gkString& name);
    virtual ~gkLogicBrick();

    virtual gkLogicBrick* clone(gkLogicLink* link, gkGameObject* dest) = 0;

    //unimportant function/variables
};

它被子类化为:
class gkLogicController : public gkLogicBrick
{
    gkLogicController(gkGameObject* object, gkLogicLink* link, const gkString& name);
    virtual ~gkLogicController() {}

    //unimportant function/variables
};

名为clone()的方法不会被覆盖,但是会从gkLogicController对象的另一个类中调用它。我以为不允许调用纯虚函数? C++编译器是否会为继承的任何纯虚函数自动创建默认定义?

最佳答案

可以调用纯虚函数(通过动态调度机制)。当您考虑它时,这实际上就是纯虚函数的目的。

我假设“被gkLogicController对象上的另一个类调用”实际上意味着通过对gkLogicController的指针或引用。然后,它必须指向/引用从gkLogicController派生的类的实例,该类的实例确实覆盖了clone。创建gkLogicController本身的实例是不可能的,因为它仍然是抽象的。

10-06 07:53