在大佬的代码中看到经常使用这种结构,于是研究了一下,最开始没太看懂用意,后来将它与pimpl手法相对比,就大致理解了。

这种手法,我称为类pimpl手法,它通过写一个含有纯虚函数的C类,B类包含C类成员,同时A类继承C类,重写纯虚函数。这样在B类中调用C类成员函数时,最终调用的是A类的成员函数。

代码示例:

class C {public:virtual void funcA() = 0;virtual void funcB() = 0;
};class Base : public C {public:void func(){std::cout << "func" << std::endl;}virtual void funcA(){std::cout << "funcA" << std::endl;}virtual void funcB(){std::cout << "funcB" << std::endl;}
};class ClassA {public:ClassA() : cbA(nullptr) {}void testA(){std::cout << "ClassA TestA\t";cbA->funcA();}void testB(){std::cout << "ClassA TestB\t";cbA->funcB();}void setC(C* cb) { cbA = cb;}private:C* cbA;
};int main()
{Base *b = new Base();b->func();b->funcA();ClassA *d = new ClassA();d->setC(b);d->testA();d->testB();return 0;
}

个人认为好处是,与pimpl一致,提高了封装性,减少了A类的接口暴露,也提高了编译速度。

与pimpl差异:
pimpl是封装了数据成员,而类pimpl手法则是封装了成员函数。

C++ 类Pimpl手法相关推荐

  1. 重复类发展手法_正确的护肤手法(动态演示),喜欢就拿去收藏吧!

    正确的手法可以大大促进肌肤对护肤品的吸收,接下来,就让我们一起来学习一下不同护肤品的正确涂抹手法吧! 洁面类 1.取黄豆粒大小,在手心揉搓出泡沫. 2.在湿润的面部,分别轻点于两颊,额头,鼻子,下巴处 ...

  2. python数星星_最好的朋友:C++11 移动语义和 Pimpl 手法

    使用了挪动语义和 PIMPL 方法的一个类 在我的文章<通过 C++11 挪动语义提升性能>中我们将PIMPL方法应用到了CTeam这个类.// cteam.h #ifndef CTEAM ...

  3. Effective 笔记

    1,C++属于一个语言联邦 : C     Object-Oriented C++     Template C++       STL 2,应尽量以const,enum,inline替换#defin ...

  4. C++智能指针中unique_ptr部分内容的讲解

    参考链接 std::unique_ptr 介绍 定义位于头文件<memory> std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离开作用域时释放该 ...

  5. c++接口与实现的分离

    由于C++没有明确的将接口和实现分离,文件之间的编译依赖关系很大,如果有一个文件代码发生变化,则可能影响其他文件,乃至整个项目.因此,将对象实现细目隐藏于一个指针背后的目的,我们可以设计一个接口类.一 ...

  6. Effective C++读书笔记 摘自 pandawuwyj的专栏

    Effective C++读书笔记(0)       Start   声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节.   std::size_t numDigits(i ...

  7. 《Effective C++》笔记

    <Effective C++>笔记 序言 条款01:视C++为一个语言联邦 条款02:尽量以const.enum.inline替换#define 条款03:尽可能使用const 条款04: ...

  8. 【C++学习】Effective C++

    本文为Effective C++的学习笔记,第一遍学习有很多不理解的地方,后续需要复习. 0 导读 术语 声明(declaration) 告诉编译器某个东西的名称和类型,但略去细节: 每个函数的声明揭 ...

  9. 大牛关于学习C++的建议

    在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为--C with classes,四年后 ...

最新文章

  1. 模拟运维中产品上线流程
  2. 论文笔记:Stochastic Weight Completion for Road Networks using Graph Convolutional Networks
  3. python生成多维数组方法总结(多维创建有问题的情况)
  4. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
  5. java中未解决的编译问题_java – 我遇到了这个异常:未解决的编译问题
  6. 偶遇拍外景的小姐姐们
  7. Android对话框_详解
  8. SharePoint 2013技巧分享系列 - 隐藏Blog和Apps左侧导航菜单
  9. Android布局(4)--相对布局(RelativeLayout)
  10. Windows程式开发设计指南--开始
  11. 有关电动自行车上牌的知识,快来围观~
  12. 同一网段两台电脑共享文件
  13. 免费错别字检测、在线纠错工具
  14. 天啦噜!逾期未还三年,欠款3万变成34万
  15. 荣耀笔记本系统linux与Windows,荣耀笔记本Win10正式版iso镜像下载与安装
  16. 咋把计算机程序固定到任务栏中,win10我的电脑固定到任务栏如何操作_win10怎么把我的电脑放到任务栏...
  17. Electron--快速入门
  18. 汽车电子功能安全标准ISO26262解析(五)——FTA
  19. 安卓10 来电流程梳理
  20. Linux常见权限处理、文件搜索、帮助、压缩命令

热门文章

  1. 042-18 RMAN备份与恢复2
  2. 探究论文检测系统抄袭的算法原理等技术研究
  3. python使用pandas中的to_json函数将dataframe数据写入json文件中
  4. MySQL8功能详解——角色
  5. v-if判断字符串是否相等
  6. Java使用POI获取Excel公式
  7. qqwry.dat的数据结构解释
  8. 手机信息采集 ——基于ebay网站Apple手机案例分析
  9. h5 input type 属性为tel苹果系统可以直接获取数字短信验证码
  10. 2022零碳中国优秀案例及零碳技术解决方案