《Effective C++》Rule 41: 了解隐式接口和编译期多态
2016-03-04 10:03
369 查看
面向对象编程世界总是以显式接口(explicit interfaces)和运行期多态(runtime polymorphism)解决问题。
例如:
Computer类的对象必定含有CpuRun()接口,它在源代码中是可见的,因此它是显式接口。
由于该函数是virtual函数,因此该函数的实现可能会出现运行期多态,也就是具体的函数实现由运行期的情况而定。
在Template及泛型编程的世界,显式接口和运行期多态的重要性降低。
在这个世界中,隐式接口(implicit interface)和编译期多态(compile-time polymorphism)更重要。
下面来看一个template函数:
1、arg支持哪些接口,由这个模板函数中的操作决定。如:Show()接口就是T必须具有的隐式接口。
2、由于不同的template参数具现化不同的函数模板,导致调用不同的函数,这便是编译期多态。
通常显式接口由函数签名式(也就是函数名称,参数类型,返回类型)构成。
隐式接口并不基于签名式,而是由有效表达式组成。如上面的Show().
例如:
class Computer { public: virtual void CpuRun() { //...... } //... };
Computer类的对象必定含有CpuRun()接口,它在源代码中是可见的,因此它是显式接口。
由于该函数是virtual函数,因此该函数的实现可能会出现运行期多态,也就是具体的函数实现由运行期的情况而定。
在Template及泛型编程的世界,显式接口和运行期多态的重要性降低。
在这个世界中,隐式接口(implicit interface)和编译期多态(compile-time polymorphism)更重要。
下面来看一个template函数:
template <typename T> void DoSomething(T& arg) { arg.Show(); //...... }
1、arg支持哪些接口,由这个模板函数中的操作决定。如:Show()接口就是T必须具有的隐式接口。
2、由于不同的template参数具现化不同的函数模板,导致调用不同的函数,这便是编译期多态。
通常显式接口由函数签名式(也就是函数名称,参数类型,返回类型)构成。
隐式接口并不基于签名式,而是由有效表达式组成。如上面的Show().
相关文章推荐
- 关于C语言%u
- C语言位运算详解( 稳固下C吧)
- C语言——预编译
- 读书笔记之:C++ Primer (第4版)及习题(ch01-ch11)
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- 贪吃蛇游戏的C语言实现
- c++知识点
- C++构造函数
- Microsoft Visual C++ 和 Borland C++ Builder 之比较
- 玩具侠-C语言学习之函数指针(2)
- C语言深度剖析-----内存管理的艺术
- [C语言][LeetCode][21]Merge Two Sorted Lists
- c++ socket 客户端库 socks5 客户端 RudeSocket™ Open Source C++ Socket Library
- 三种工厂模式的分析以及C++实现
- C++栈(stack)
- [C++11]_[初级]_[weak_ptr的使用场景]
- [C++11]_[初级]_[weak_ptr的使用场景]
- C/C++程序员必须熟练应用的开源项目
- C++封装继承多态总结
- C++ 虚函数 重载 重写的区别(转)