首页 > 解决方案 > 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技巧吗?

标签: c++inheritancechromium

解决方案


这样的一个类(当然,或者它的一个朋友)可以将this适当地转换为指向私有基的指针传递给任何接受这种指针的组件,从而允许使用其接口的实现,但只能在其选定的上下文中使用。


推荐阅读