我有一个在父类(super class)InteractorStyle中定义的函数。然后,我还有另一个需要实现该功能(纯虚拟)的类PointSelector。然后,实例化PointSelector的子类PointSelector2D。编译器抱怨我无法实例化一个抽象类,因为未实现MyFunction()。为什么从InteractorStyle继承的函数不计为该实现?

#include <iostream>

// I can't change these:
class InteractorStyle
{
  void MyFunction(){}
};

class PointSelector
{
  virtual void MyFunction() = 0;
};

class PointSelector2D : public InteractorStyle, public PointSelector
{

};


int main()
{
  PointSelector2D a;
  return 0;
}

最佳答案

因为有了多重继承,您现在已经继承了两个不相关的函数,每个基类都继承了一个。它们恰好彼此具有相同的名称(实际上,它们并不相同;一个称为InteractorStyle::MyFunction,另一个称为PointSelector::MyFunction)。

但是一个不会覆盖另一个(至少不是在您希望的意义上)。

关于c++ - 继承的函数不算作实现吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7198238/

10-08 22:46