你能在c ++的抽象类中使用抽象函数吗?

时间:2016-06-21 18:24:48

标签: c++ oop

我是否可以使用抽象方法构建一个类,比如action

  virtual double action (int num1,int num2) const = 0;

然后为同一个类写一个成员函数,比如eval

  double eval () const 
  {
   ..
   //In here we use function "action"
   ..
   }

因为一方面该类是抽象的,因此我无法创建它的实例,因此它永远不会执行抽象函数。另一方面,可能不是吗?

这个问题的最后阶段是不要在继承我的类的其他类中记下该函数,并且只编写一次函数eval而不同的动作函数似乎很有用。

2 个答案:

答案 0 :(得分:4)

是的,这是合法的。如果从action内调用eval,它将调度到调用eval的实际对象的动态类型中的最终覆盖,这必然是具体的(不是抽象)类型。

答案 1 :(得分:1)

是的,你可以这样做,这被称为Template Method Pattern。该名称相当混乱,因为没有涉及的模板(在c ++意义上)。如果子类专门化某些更大计算的部分(例如,如在您的示例中),则可能很有用。