Effective C++ ------- virtual
public继承意味着is-a(是一种),所以对base class为真的任何事情
一定也对其derived class为真。
1 pure virtual 函数必须被任何继承了他们的子类实现,通常它们在抽象
类中没有定义,结合两者,我们发现,声明一个纯虚函数的目的是为了
让派生类只继承函数接口。
2 声明非纯impure virtual函数的目的,是让派生类继承其接口以及一份默认
实现。
(此处飞机的A,B,C例子,C可能不想用默认行为,但是缺省就用了,
对此可以利用纯虚函数+实现,子类里如果想用默认行为,则显示调用
base::purevirtual_func() )
3 声明非虚函数的目的是让派生类继承函数的接口和一份强制性实现。
class定义内出现函数实现,则暗自成了inline。
替代虚函数:
NVI手法(non virtual interface,基类里声明一个non virtual函数,但是它
调用private的virtual函数,各子类实现自己的virtual函数。也叫template method
设计模式, 这个non virtual函数可以控制调用virtual函数之前的准备工作,加锁
之类的,也可以做virtual函数调用后的释放、清理工作)
运用函数指针给每个对象(对象持有函数指针成员),其优点是每个对象的处理
函数都可以不同,也可以在运行期改变计算函数(setCalcFunc),其缺点是会
降低类的封装性(读取类的成员变量)
绝不要重新定义继承而来的non-virtual函数,析构函数就是一个特别的例子。
条款37: 绝不要重新定义一个继承来的缺省参数值,因为缺省参数值都是
静态绑定,而virtual函数---你唯一应该覆写的东西---却是动态绑定的。
当出现这种使用virtual遇到麻烦时,可以考虑上述的NVI等替代方案。
转载于:https://www.cnblogs.com/lijinping/p/6069932.html
Effective C++ ------- virtual相关推荐
- Using a physical whiteboard is more effective than virtual tools in the stand-up meeting.
During a stand-up meeting we always use whiteboard, such as Trello, RTC and Jira etc. I prefer to us ...
- Effective C++(9) 构造函数调用virtual函数会发生什么
问题聚焦: 不要在构造函数和析构函数中调用virtual函数,因为这样的调用不会带来你预想的结果. 让我先来看一下在构造函数里调用一个virtual函数会发生什么结果 Demo class Trans ...
- effective c++:virtual函数在构造函数和析构函数中的注意事项
effective c++:virtual函数在构造函数和析构函数中的注意事项 如不使用自动生成函数要明确拒绝 对于一个类,如果你没有声明,c++会自动生成一个构造函数,一个析构函数,一个copy构造 ...
- Effective C++条款09:绝不在构造和析构过程中调用virtual函数
Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...
- Effective C++ .07 virtual析构函数的提供
主要讲了, 1. virtual析构函数的作用与调用顺序 2. 使用时机,并不是使用了继承就要把基类的析构函数变为虚函数(virtual),只有当用于多态目的时才进行一个virtual析构函数的定义. ...
- Effective C++条款7:为多态基类声明virtual析构函数
要点: 带多态性质的基类或者class中有virtual函数,就应该将析构函数声明为virtual,例如 class TimeKeeper { public:TimeKeeper();~TimeKee ...
- 用virtual实现TemplateMethod和Strategy--龙之介《Effective C++》实验室
条款35:考虑virtual函数以外的其他选择 假设你现在的需求是实现一个返回伤害值的功能. 由于不同的人物可能会以不同的方式计算他们的伤害值 所以这可以使用virtual来定义它,子类可以进行重新定 ...
- effective C++读书笔记--【条款07:为多态基类声明virtual析构函数】
问题 base class的指针p,指向一个derived class,如果: base class带着一个non-virtual析构函数: derived class对象经由这个base class ...
- Effective STL 50条有效使用STL的经验笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
最新文章
- Windows下在Django中创建项目时ImportError: No module named django.core解决方法
- 优化C代码常用的几招
- [BUUCTF-pwn]——gyctf_2020_borrowstack
- mysql srid_mysql8 参考手册--索引优化
- phpul 无序列表,PHP – 简单嵌套无序列表(UL)数组
- chrome vue 未响应_vue之骨架屏踩坑之路
- HTML 代码复用实践 (静态页面公共部分提取复用)
- 家用计算机选购,家用电脑该如何选择?什么配置比较好?看完这篇文章你就懂了...
- 9550电机_电机扭矩计算公式里面的9550*P是怎么得来的?
- ANSYS——模态分析的理论基础
- 如何通过定时关机命令,实现Windows XP的自动关机?
- 计算理论导引重点知识回顾
- 【模电】0013 反馈放大电路基础
- 程序员都会的常用Linux网络命令汇总
- Rhombus 使用 Wolfspeed SiC 加快电动汽车充电速度
- 蜜蜂问题- 斐波那契数列
- win10-SW2016工程图关联零件属性链接操作
- 隔离电源与非隔离电源的选择及优缺点分析
- midi键盘接电脑实现电子琴功能
- HG 新闻 RS5 环境点
热门文章
- python求和函数1到100_Python定义函数实现累计求和操作
- share with用法
- 如何设计APP版本号?
- [AT2567] [arc074_c] RGB Sequence
- 国际软件设计文档——概要设计说明书
- Java 和 Python 解析动态 key 的 JSON 数据
- zoj3806Incircle and Circumcircle
- JavaScript学习05 定时器
- mfc中主窗体显示(任务栏上方显示)
- linux 多个变量,linux-BASH-使用相同“变量”的多个实例读入...