我是否可以使用抽象方法构建一个类,比如action
virtual double action (int num1,int num2) const = 0;
然后为同一个类写一个成员函数,比如eval
double eval () const
{
..
//In here we use function "action"
..
}
因为一方面该类是抽象的,因此我无法创建它的实例,因此它永远不会执行抽象函数。另一方面,可能不是吗?
这个问题的最后阶段是不要在继承我的类的其他类中记下该函数,并且只编写一次函数eval而不同的动作函数似乎很有用。
答案 0 :(得分:4)
是的,这是合法的。如果从action
内调用eval
,它将调度到调用eval
的实际对象的动态类型中的最终覆盖,这必然是具体的(不是抽象)类型。
答案 1 :(得分:1)
是的,你可以这样做,这被称为Template Method Pattern。该名称相当混乱,因为没有涉及的模板(在c ++意义上)。如果子类专门化某些更大计算的部分(例如,如在您的示例中),则可能很有用。