博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++--经验条款
阅读量:7070 次
发布时间:2019-06-28

本文共 1510 字,大约阅读时间需要 5 分钟。

高效C++ --模板与泛型编程

在C++中模板体现的是编译期多态,virtual体现的是执行期多态。

关于typename的双重含义:

在声明template參数时,不论使用keywordclass或typename,意义全然同样。

可是C++并不总是把class和typename视为等价。

有时候必须使用typename。

Template内出血的名称假设依于某个template參数,称之为从属名称。假设从属名称在class内呈嵌套状,我们称她为嵌套从属名称。

总而言之,在一个模板中使用了还有一个模板内的參数类型,就须要使用typename表明所使用的这个变量是属于一个模板中的类型。

不论什么时候当你想要在template中值涉一个嵌套从属类型名称,就必须在紧邻他的前一个位置放上keywordtypename

使用typename表示嵌套从属类型名称。但不得在base class list(基类列)或member initialization list(成员初值列)内以它作为baseclass修饰符。

 

在使用new申请内存时,假设内存空间不足。可能会有异常发生,可是能够从外界设置异常发生时调用的函数。set_new_handler

 

区分接口继承和实现继承:

函数接口继承和函数实现继承。这两种继承的差异,非常像函数声明与函数定义之间的差异。

有时候希望derived classes仅仅继承成员函数的接口(也就是声明);有时候你又会希望derived classes同一时候继承函数的接口与实现。但又希望可以override他们所继承的实现;又有时候你希望derived classes同一时候继承函数的接口和实现。而且不同意override不论什么东西。

事实上上面的三种情况分别相应三种情况,各自是纯虚函数,虚函数,和基类的函数

 

声明一个pure virtual函数的目的是为了让derived classes仅仅继承函数接口。

声明简朴的impure virtual函数的目的。是让derived classses继承该函数的接口和缺省实现。

声明non-virtual函数的目的是为了令derived classes继承函数的接口及一份强制性实现。

 

模板特化的方法。对于模板的特化就像是又定义了一个模板,只是这个模板的參数是已经规定好的,所以的template里面就不须要定义typename。相当于模板的重载,仅仅只是这个模板的參数是已经规定好了的。

 

Effective C++中提到过。使用const enum inline取代#define,这里的意思是前面能够替代后面。由于对于#define来说。将来替换的始终是文本。假设有错或者使用#define不是非常恰当,可能在编译的时候不会出错可是在执行过程会出错。假设是使用前者来搞定这些,他们假设有错,在编译的时候是能够发现的。

 

眼下全部编译器对于virtual function 的实现方法都是使用各个class专属的virtual table。大小固定,而且在程序运行前就构造好了。

 

C++在布局以及存取时间上基本的额外负担是由virtual引起的。

Virtual function机制:用以支持一个有效率的“运行期绑定”

Virtual base class用以实现“多次出如今继承体系的base class 有一个单一而被共享的实体”

这两种机制分别相应子类中的vptr vbtr子类中有两个指针。分别运行他们

另一些多重继承下的额外负担,发生在“一个derived class和其第二或后继之base class的转换”之间。

 

 

转载地址:http://kohll.baihongyu.com/

你可能感兴趣的文章
UVA 10887 set或hash
查看>>
09-排序1 排序
查看>>
以后修改系统自带的控件 注意
查看>>
Eclipse编辑快捷键
查看>>
POJ 1915 简单 广搜题
查看>>
洛谷P2419 [USACO08JAN]牛大赛Cow Contest
查看>>
luogu P2107 小Z的AK计划
查看>>
python处理时间戳
查看>>
largest-divisible-subset
查看>>
listen函数里面backlog的意义以及各种情况
查看>>
100层高楼摔2个鸡蛋的问题?
查看>>
新东方雅思词汇---7.2、warrant
查看>>
html5--6-56 阶段练习5-翻转效果
查看>>
php实现合并多个数组
查看>>
php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)...
查看>>
进度条控件基本使用
查看>>
DataGrid PCV排序学习
查看>>
centos7安装jdk1.8
查看>>
Vue中v-for的数据分组
查看>>
实现选项卡的原理
查看>>