在C++中,为什么纯函数必须是虚拟的

In C++ why a pure function must be virtual?

本文关键字:虚拟 函数 C++ 为什么      更新时间:2023-10-16

我在谷歌和这里搜索过,但我不明白为什么类中的纯函数必须是虚拟的。我知道,将"正常函数"声明为纯函数可能不是很有用,但我不认为这是无稽之谈。我的意思是,"纯"这个词只是用来声明一个抽象类。好吧,我不能将多态性与纯正常函数一起使用,但无论如何,主要原因(将类声明为抽象)已经达到了。我错了吗?

不要求纯函数是虚拟的。如果你在想"纯虚拟功能"这个术语,"纯"适用于那里的"虚拟";该功能纯粹是虚拟的。这是"纯净"一词的另一种用法。

我的意思是,"纯"这个词只是用来声明一个抽象类。

事实并非如此。声明纯虚拟函数的原因不是为了阻止封装类的实例化;这是为了确保具体的子类实现该方法,通常是因为抽象类无法提供合理的实现。

好吧,我不能将多态性与纯正常函数一起使用,但无论如何,主要原因(将类声明为抽象)已经达到了。

如果您正在寻找一种在没有任何纯虚拟函数的情况下声明类抽象的方法,C++没有专门的语法。我看到的建议是声明和实现一个纯虚拟析构函数(你可以这样做),或者使构造函数受到保护(但使构造函数受到限制不会使你的类通过std::is_abstract)。在任何情况下,将其语法附加到任意成员函数都没有多大意义;像CCD_ 2这样的东西会更有意义。

您想要拥有"纯函数"的唯一原因是确保从此类继承的子类定义该函数的实现。如果你允许纯函数是非虚拟的,因此不能被覆盖,那么它们基本上是毫无意义的。