c++ - C++中私有继承抽象基类是什么意思
问题描述
在 C++ 中,我们有一个包含纯公共纯虚拟成员函数的基类,称为抽象基类。然后我们定义它的一个子类,但是使用私有继承。我们知道这是一个实现继承,但在这种情况下,继承的是接口。是的,这个问题听起来很奇怪——你用私有继承来继承一个纯接口!
实践中存在示例,即使在 Chromium 等工业代码库中也是如此。在这里,我们得到了一个RawResourceClient
作为抽象基类。注意它的成员函数不是纯虚函数,而是带有空体的虚函数,这与纯虚函数非常相似。在该网页中,您可以找到“子类”选项卡。以下是一些从它私下继承的类:
class InspectorResourceContentLoader::ResourceClient final
: public GarbageCollectedFinalized<
InspectorResourceContentLoader::ResourceClient>,
private RawResourceClient {
USING_GARBAGE_COLLECTED_MIXIN(ResourceClient);
class CORE_EXPORT ThreadableLoader final
: public GarbageCollectedFinalized<ThreadableLoader>,
private RawResourceClient {
USING_GARBAGE_COLLECTED_MIXIN(ThreadableLoader);
我的问题是,幕后巧妙的把戏是什么?是在使用friend
技巧吗?
解决方案
这样的一个类(当然,或者它的一个朋友)可以将this
适当地转换为指向私有基的指针传递给任何接受这种指针的组件,从而允许使用其接口的实现,但只能在其选定的上下文中使用。
推荐阅读
- c++ - 如何在 C++ 中序列化和解析 protobuf 3?
- javascript - 如何在不@发件人的情况下发送消息
- javascript - 如何在 Node 环境中运行 JavaScript 代码片段?
- arrays - Flutter 从 Firebase 数组映射构建 ListTiles
- laravel - 如何使用 Vue 访问 laravel 公共文件夹中的文件?
- r - 如何根据最大值重新编码数据框列?
- javascript - JS不断报告“toString”方法未定义
- python - 如果存在 Python 正则表达式,或者在 Zapier 工作流程中
- python-3.x - 为什么我的主循环在 tkinter 中不起作用?
- c++ - 我的基于文本的游戏显示落后一帧