2016年潭州教育安卓开发最新教程

2022-04-13 04:52:48   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《2016年潭州教育安卓开发最新教程》,欢迎阅读!
安卓,潭州,教程,开发,最新

隐式接口和编译期多态--潭州教育

oop都是以显示接口和运行期多态解决问题;



Template和泛型编程以隐式接口和编译期多态解决问题。

---------------------------------------------------------------------------------------------------------------------------------------------- classestemplate都支持接口和多态。

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

对于template而言接口是隐式的,取决于有效表达式;多态是通过template具现化和函数重载解析发生于编译期。

----------------------------------------------------------------------------------------------------------------------------------------------

class Widget { public: Widget();

virtual ~Widget();

virtual std::size_t size() const; virtual void normalize(); void swap(Widget& other); };

显示接口由函数的签名式(函数名称、参数类型、返回类型)构成:

一个构造函数、一个析构函数、函数sizenormalizeswap以及其参数类型、返回类型、常量性构成;


当然也包括编译期产生的copy构造函数、copy assignment操作符。另外也可以包括typedef 运行期多态:

由于有virtual函数,那么函数的调用将取决于运行期w的动态类型。换句话说就是,virtual函数的调用不在编译期决定,而是在运行期决定调用哪个virtual函数:base class的版本还是derived class的版本)

template

void doProcessing( T& w) {

if(w.size() > 10 && w != someNsatyWifget) {} }

隐式接口并不基于函数的签名式。而是由有效表达式组成: T的隐式接口看起来好像有这么约束:

1.他必须提供一个名为size的函数,该函数返回一个整数值。

2.他必须支持一个opreator=函数,用来比较家两个T对象。这里我们假设someNastyWidget的类型是T

size成员函数可能是从base class 继承而来的,所以它不需要返回一个数值类型。 T并不需要支持opreator=,因为opreator=接收一个类型为x的对象那个和一个类型为y的对象,T可被转换为xsomeNastyWidget的类型可被转换成y这样就可以有效调用!=了。

虽然具体确定隐式接口很难,但是我们整体确认表达式约束条件却很简单,if语句的条件句必须是个布尔表达式。这是template doProcessing加诸于其类型参数T的隐式接口的一


部分。其他的隐式接口是:copy构造函数、normalizeswap也都必须对T类型对象有效。 编译期多态:

对于w的任何函数调用,都有可能造成template具现化。 这些行为发生在编译期。

以不同的template参数具现化function template会导致调用不同的函数,这就是编译期多态。

Ps:显示接口和隐式接口都在编译期完成检查。


本文来源:https://www.dywdw.cn/010c3fa6cf84b9d529ea7a07.html

相关推荐
推荐阅读