[C++再学习系列] 虚函数的4条规则
2009-07-02 21:32
435 查看
虚函数的
4
条规则
对于常规的基类函数来说:
1
尽量使用非虚拟接口模式
(NVI)
让接口函数成为非虚拟的
.
2
尽量让虚函数成为私用的
.
3
只有当派生类需要调用基类对某个虚函数的实现时,才把虚函数声明为保护的
.
4
基类的析构函数应该要么为共有虚函数
,
要么为保护虚函数
.
说明
: 1,2
两条将虚共有接口的两个职责进行了很好的分解
,
遵守了单一职责原理
.
第
4
条说明了
,
如果要使用多态
(
指针调用
),
那么基类的析构函数一定要为虚函数
;
如果基类本身的设计不是处于多态考虑的话
,
那么就应该将析构函数设为保护类型
.
这样可以防止出现使用指针的析构
(
基类无法被直接析构
),
只有派生类才能析构基类
.
1)
非虚接口模式
(NVI)
的说明:基类对接口具有完全控制权,很方便在一个单一的、可复用的地方实施
(enforce)
接口的前条件跟后条件、插入一些设备或做一些类似的事情。更好的是实现接口和实现分离;让基类在变化面前更稳定。条件检查可以仅在调式期有效,这更易于控制。如果非虚函数仅有唯一一行转发调用,编译器会做内联优化,没有效率问题。
相关文章推荐
- [C++再学习系列] 虚函数的4条规则
- [C++再学习系列] 虚函数的4条规则
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- C++基础学习系列--2、递归思想,内置函数,函数重载,函数模板,带默认值函数
- c/c++学习系列之memset()函数
- [C++再学习系列] 函数声明与STL容器构造
- [C++再学习系列] C++编译器的函数编译流程
- [C++再学习系列] 函数模板和类模板
- C++学习总结系列--函数部分
- [C++再学习系列] 函数模板和类模板
- C++基础学习系列--0(前言)、异或运算和sizeof函数
- C++学习总结系列--虚函数与多态
- [C++再学习系列] C++编译器的函数编译流程
- 改善C++ 程序的150个建议学习之建议20:使用memcpy()系列函数时要足够小心
- 改善C++ 程序的150个建议学习之建议20:使用memcpy()系列函数时要足够小心
- [C++再学习系列] 函数声明与STL容器构造
- C++学习笔记27,虚函数作品
- C++中子类与基类的函数隐藏规则