繁体   English   中英

私有继承C ++中的抽象基类的含义是什么

[英]What's the meaning of privately inheriting an abstract base class in C++

在C ++中,我们有一个包含纯公共纯虚拟成员函数的基类,称为抽象基类。 然后,我们定义它的子类,但使用私有继承。 我们知道这是一个实现继承,但是在这种情况下,继承的是interface 是的,这个问题听起来很奇怪-您使用私有继承来继承纯接口!

实践中存在示例,即使在工业代码库(例如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 (适当地转换为指向私有基的指针)传递给接受该指针的任何组件,从而允许使用其接口实现,但只能在其选定的上下文中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM