Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中派生类避免动态调度的C++_C++_Virtual Functions_Dynamic Dispatch - Fatal编程技术网

C++中派生类避免动态调度的C++

C++中派生类避免动态调度的C++,c++,virtual-functions,dynamic-dispatch,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就是一

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

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时重写fn。这条路对吗


谢谢

只要不使用指针,就可以通过在函数定义中避免使用“virtual”关键字来避免动态调度,如本文所述


这就造成了泛型方法和多态性的复杂性。如果使用动态多态性,则会将指向基类的指针传递给方法,在这种情况下,指针需要使用“virtual”关键字来确定要使用的方法。可以使用模板定义静态多态方法,如下所述。

Deri2不从Base继承。这是故意的吗?哎呀!很抱歉我现在已经更正了。在这种情况下,您甚至不需要输入using指令。除非您重载了函数,而且不想重写它。谢谢,但我尽量避免动态调度,即使用vtables来确定虚拟函数。此外,在扩展中,存在一些重载。如果不希望动态分派,请不要将函数虚拟化。