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

时间:2016-05-11 16:06:23

标签: c++ function class virtual

我在google和这里搜索过但我无法理解为什么类中的纯函数必须是虚函数。我理解也许将“正常功能”称为纯粹是不是很有用,但我认为这不是废话。我的意思是,“纯粹”这个词只是为了宣布一个抽象类。好吧,我不能将多态性与纯正常函数一起使用,但无论如何都要达到主要原因(将类声明为抽象)。 我错了吗?

2 个答案:

答案 0 :(得分:5)

不要求纯函数是虚拟的。如果您正在考虑“纯虚函数”一词,那么“纯”适用于“虚拟”;该功能纯粹是虚拟的。这是对“纯粹”这个词的不同用法。

  

我的意思是,“纯粹”这个词只是为了宣布一个抽象类。

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

  

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

如果您正在寻找一种在没有任何纯虚函数的情况下声明类抽象的方法,那么C ++没有专门的语法。我见过的建议是declare and implement a pure virtual destructor (you can do that), or to make the constructor protected(但是保护构造函数不会使你的类通过std::is_abstract)。在任何情况下,将语法附加到任意成员函数都没有多大意义;像class Foo = 0 { ... };这样的东西会更有意义。

答案 1 :(得分:4)

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