C ++避免使用关键字在派生类中进行动态分派

时间:2013-10-02 12:12:08

标签: c++ virtual-functions dynamic-dispatch

在以下示例中,我将使用动态分派来调用虚函数吗?

struct Base{
    virtual double fn(){return 3.2;}
};
struct Deri1 : public Base{
    using Base::fn;
}
struct Deri2 : public Base{
    virtual double fn(){return 4.6;}
}

我正在实现的类包含更多信息,但有一些我想保留一些派生类的默认值但在其他派生类中重写,上面代码中的fn()就是一个例子。基本上,我只是使用基类来避免每次重写时都重写fn()。这是正确的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

可以通过避免函数定义中的'virtual'关键字来避免动态调度,只要不使用指针,如此link中所述。< / p>

这会产生一些通用方法和多态性的并发症。如果使用动态多态,则可以将指向基类的指针传递给方法,在这种情况下,“virtual”关键字是指针确定使用哪种方法所必需的。可以使用模板定义静态多态方法,如以下link中所述。