Effective C++ -----条款41:了解隐式接口和编译期多态

classes和templates都支持接口(interface)和多态(polymorphism)。

对classes而言接口是显式的(explicit),以函数签名为中心。多态则是通过virtual函数发生于运行期。

对template参数而言,接口是隐式的(implicit),奠基于有效表达式。多态则是通过template具现化和函数重载解析(function overloading resolution)发生于编译期。

时间: 2024-10-10 08:33:20

Effective C++ -----条款41:了解隐式接口和编译期多态的相关文章

Effective C++ 条款41 了解隐式接口和编译期多态

1. 面向对象编程通常以显式接口(类中的函数原型)和运行时多态(虚函数和RTTI)解决问题,但在Templates及泛型编程的世界,尽管显式接口和运行时多态仍然存在,但隐式接口和编译时多态的重要性却明显提升. 2.通常显式接口由函数签名式构成,而隐式借口并不基于函数声明式,而是有有效表达式组成. 所谓泛型编程中的隐式接口,指的是类型参数在函数模板或类模板中的成员函数内部所涉及的操作.也就是说类型参数必须支持函数模板内部所进行的操作,比如operator>,operator!=等,而对于不同类型,

Effective C++ Item 41 了解隐式接口和编译期多态

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:class 和 templates 都支持接口和多态. 对 classes 而言接口是显式的,以函数签名为中心.多态则是通过 virtual 函数发生于运行期 对 templates 参数而言,接口是隐式的,奠基于有效表达式.多态则是通过 templates 具体化和函数重载解析(function overloading resolution)发生于编译期. 示例1:显式接口和运行期

读书笔记 effective c++ Item 41 理解隐式接口和编译期多态

1. 显示接口和运行时多态 面向对象编程的世界围绕着显式接口和运行时多态.举个例子,考虑下面的类(无意义的类), 1 class Widget { 2 public: 3 Widget(); 4 virtual ~Widget(); 5 6 virtual std::size_t size() const; 7 virtual void normalize(); 8 9 void swap(Widget& other); // see Item 25 10 11 ... 12 13 }; 考虑下

条款41:了解隐式接口和编译期多态

1.显式接口和运行期多态 (1)简介 面向对象编程总是以显式接口和运行期多态来解决问题.例如: class Widget{ public: Widget(); virtual ~Widget(); virtual std::size_t size() const; virtual void normalize(); virtual swap(Widget& other); }; void doProcessing(Widget& w) { if (w.size() > 10 &

Effective C++ 条款41

本节条款对比了一下两对概念的对比. 首先是 编译期多态和运行期多态. 接着是 显示接口和隐式接口 编译期多态是由于模板而产生的. 如下代码: #include<iostream> using namespace std; class Bird { public: Bird(int v):value(v){} int getSize(){ return value; } private: int value; }; class Person//鸟 { public: Person(int v)

C# - 接口_隐式接口实现

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 接口_隐式接口实现 7 { 8 // 定义接口1 : IChineseGreeting 9 interface IChineseGreeting 10 { 11 void SayHello(); 12 } 13 14 // 定义接口2 : IAmericanGreeting 15 i

显示接口和隐式接口的区别:

一.新建一个接口类 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// InterF 的摘要说明 /// </summary> public class InterF { public interface hide { string show(); } public interface display { string show(

008.在C#中,显式接口VS隐式接口

原文http://www.codeproject.com/Articles/1000374/Explicit-Interface-VS-Implicit-Interface-in-Csharp (Aty表示本人) 介绍 什么是显式和隐式接口 什么时候需要显式接口 更简洁的方法(ISP:接口隔离原则) 显式接口更多 结论 介绍 文章将讨论下显式接口,讨论它们与隐式接口的区别,以及为什么应该避免使用. 什么是显式和隐式接口 C#中有两种方式来实现接口:显式和隐式 定义如下接口: 当我们隐式的实现该接

Effective C++ -----条款31:将文件间的编译依存关系降至最低

支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 程序库头文件应该以“完全且仅有声明式”(full and declaration-only forms)的形式存在.这种做法不论是否涉及templates都适用.