C++ 在C++;为什么纯函数必须是虚函数?

C++ 在C++;为什么纯函数必须是虚函数?,c++,function,class,virtual,C++,Function,Class,Virtual,我在google和这里搜索过,但我不明白为什么类中的纯函数必须是虚拟的。我明白,将“正常函数”声明为纯函数可能不是很有用,但我不认为这是胡说八道。我的意思是,“纯”这个词只是用来声明一个抽象类。好的,我不能将多态性与纯正常函数一起使用,但主要原因(将类声明为抽象类)仍然存在。 我错了吗?没有要求纯函数是虚拟的。如果你想到“纯虚拟功能”这个词,“纯”适用于“虚拟”这个词;该功能是完全虚拟的。这是“纯”一词的不同用法 我的意思是,“纯”这个词只是用来声明一个抽象类 不是。声明纯虚函数的原因不是为了阻

我在google和这里搜索过,但我不明白为什么类中的纯函数必须是虚拟的。我明白,将“正常函数”声明为纯函数可能不是很有用,但我不认为这是胡说八道。我的意思是,“纯”这个词只是用来声明一个抽象类。好的,我不能将多态性与纯正常函数一起使用,但主要原因(将类声明为抽象类)仍然存在。
我错了吗?

没有要求纯函数是虚拟的。如果你想到“纯虚拟功能”这个词,“纯”适用于“虚拟”这个词;该功能是完全虚拟的。这是“纯”一词的不同用法

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

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

好的,我不能将多态性与纯正常函数一起使用,但主要原因(将类声明为抽象类)仍然存在


如果您想寻找一种声明类抽象而没有任何纯虚函数的方法,C++就没有专用的语法。我看到的建议是(但是保护构造函数不会使类通过)。在任何情况下,将其语法附加到任意成员函数都没有多大意义;类似于

类Foo=0{…}会更有意义。

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

你有一个示例类来演示你的特殊情况吗?我的意思是,通常最好包含你尝试过的内容,这样人们就可以对你的示例进行说明。代码+特定错误=更好的答案。@erip,任何人都不应该提及纯人类。这假设存在不纯洁的人类,这就是法西斯意识形态的基础。没有纯粹的人,因为没有不纯洁的人。@SergeyA:那是不正确的。仅仅因为没有干水这类东西并不意味着水不是湿的。干冰呢?是的,别再想我匆忙选择的类比了,但我可以覆盖一个非虚拟的函数。我认为,这个答案不恰当地假设“纯”函数存在。@andre3312,你可以。但是,如果通过基类指针或对象进行调用,则函数调用不会分派到派生类实现。@SergeyA否,我是说没有
virtual
的纯函数没有意义,
纯virtual
函数存在是的。或者,如果你想得到具体信息,可以使用
pure-virtual
方法。@andre3312:“但是我可以覆盖一个非虚拟函数。”不,你不能。@RSahu:“pure-function”指的是。没有要求这样的功能是虚拟的。您想到的是纯虚函数,这是一个完全无关的概念。@RSahu“纯函数”通常指函数语言中的函数。纯函数是一个没有副作用的函数。@RSahu公平,但你的困惑是纯函数必须是虚拟的——它们不一定是虚拟的。语义很重要。:)它作为一个概念也很难理解,因为wrt-OO中的“纯函数”并不存在。不,它不是。这就像说C指针是智能指针,因为它们的使用方式很好。这是将两个含义截然不同的术语混为一谈。我认为,如果人们用他们的语法名称来称呼它们,这将大大减少混淆。它们是纯粹的虚拟函数。