为什么纯虚成员函数必须是虚的?

问题描述 投票:0回答:1

我有一个关于 C++ 中纯虚函数声明的问题。我有 Java 背景,因此我将纯虚函数视为定义抽象类和接口思想的一种方式。我的问题很简单,当我们在C++中定义纯虚函数时,我们必须这样写:

virtual void function() =0

void 可以是任何类型,但我们必须包含等于 0 和 virtual 关键字。我理解“等于 0”部分用于定义纯函数,但我的问题是为什么它必须是虚拟的?难道我们不能在没有 virtual 关键字的情况下定义它吗?这只是包含在纯虚函数定义中的 C++ 的一部分吗?还是有逻辑原因解释为什么“抽象方法”也必须是虚函数?

c++ interface language-lawyer abstract-class
1个回答
1
投票

非虚的纯函数没有多大意义。 从根本上来说,函数是可以通过某种方式调用的命名代码段。如果你让它变得纯粹,那就意味着(可能)根本没有代码部分;只有名字。

这对于

virtual
成员函数确实有意义,因为实现可以由派生类之一提供。即使
Base::foo()
不存在,调用
Base::foo()
也有可能通过动态调度来调用
Derived::foo()
。然而,如果没有
virtual
,这样的机制就不存在。

同样,

abstract final
方法在Java中没有多大意义。 C++ 中的非虚拟成员函数可以被视为
final
,因为没有覆盖它的机制。

© www.soinside.com 2019 - 2024. All rights reserved.