可能重复:C中的私有虚方法
如果我从这篇文章中正确理解(Private virtual method in C++),在基类中创建虚函数会使派生类能够覆盖它 . 但似乎事情停在那里 .
但是如果基类虚函数是纯函数,则强制派生类实现该函数 . 因此,纯(公共)虚拟功能仅仅是一个接口 . 我在这里可以看到一个好处 .
另一方面,通过将基类虚函数设为私有,只允许派生类重写函数,但我认为没有任何好处 . 这就好像私有虚拟功能甚至不存在 . 派生类显然不知道基类中是否存在该虚函数,因为它是私有的,因此在继承或多态方面声明基类私有函数virtual有什么好处吗?
此外,是否存在基类将声明函数“纯虚拟”和“私有”的情况?
谢谢 .
3 回答
一个好处是实现template method pattern:
这允许派生类实现某个逻辑的每个部分,而基类确定如何将这些部分放在一起 . 由于这些部分本身没有意义,因此它们被声明为
private
,因此隐藏在客户端代码之外 .这是基于希望其子项实现基本身需要使用的功能的情况 . 想象一个愚蠢的例子 - 汽车 .
现在Car没有't need to know anything about Ferrari'的引擎,只是它实现了一些
Engine
接口,保证Car
可以获得有关其功率和扭矩的信息 .在这个愚蠢的例子中,一切都可以通过使
getTorque
和getPower
纯虚拟来简化,但我希望它能说明这个想法 .Base
需要使用它知道每个孩子必须具有的一些特定逻辑,因此它通过私有纯虚拟成员查询它 .如果方法是虚拟的,它可以被派生类覆盖,即使它是私有的 . 无论如何,它应该被声明为受保护 .