GeekBand C++面向对象高级编程(下) 笔记&心得 1

1.1.1  conversion function 转换函数


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第1张图片
double()是转换函数

这里double()不能指定返回值,而直接使用operator doule()这种形式。

但是这里这段代码在G++下并不能将f成功转换为0.6,而是0。应该:


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第2张图片
分别将int装为double

或者直接将两个private变量声明为double才能成功转换。

1.1.2 non-explicit-one-argument ctor


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第3张图片
non-explicit-one-argument ctor

Q:为什么是one-argument

A:因为只有一个参数需要真正被定义(num)。


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第4张图片
二义性错误

上图错误原因在于编译器不知道表达式中的“4”使用Fraction转换后使用double还是使用“+”操作符重载。将上图中double() 或 operator +的任意一个声明删除就可以通过编译。


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第5张图片
explicit显式声明转换函数

explicit(程序中打错了)意思是必须使用显式声明。例如Fraction d2 = f + Fraction(4)就可以。

STL中的应用:


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第6张图片
bool()的converision

小结:  explicit vs non-explicit vs converision

前两者基本在构造函数中使用,用来进行显式或非显式的声明,而转换函数常用于对类型转换进行重载。



1.2 智能指针


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第7张图片

智能指针

智能指针也叫pointer-like-classes。也就是类指针。而两者区别在于类指针多了一层封装机制,将指针使用类封装。设计智能指针的初衷应该是许多程序员常常创建指向某个对象的指针之后忘记删除它或因为程序执行(比如抛出了一个异常)没有删除,导致产生悬垂指针,发生内存泄露。而智能指针更好的控制指针的生命周期,使它安全地被删除。

参考:

http://blog.csdn.net/hackbuteer1/article/details/7561235

https://www.zhihu.com/question/20368881

http://www.cnblogs.com/lanxuezaipiao/p/4132096.html


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第8张图片

迭代器,某种智能指针


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第9张图片
迭代器,细节



1.3 仿函数


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第10张图片
仿函数代码



1.4 namespace


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第11张图片
namespace

简单不细说了。

1.5  function template


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第12张图片
function-template


member-template


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第13张图片
member-template实例


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第14张图片
以一组为参数上传


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第15张图片
STL中的实例

模板的特化


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第16张图片
模板的特化

我的理解中模板的特化相当于模板中的一个if语句,将模板中特别的例子特殊化定义。如果你有一个对某种的方法更好的实现,那么使用特化。

模板的偏特化


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第17张图片
模板的偏特化


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第18张图片
模板的偏特化

Q:偏特化和特化的区别?

A:偏特化相当于某个特化的IF语句,针对某种情况的全特化特殊实现称为偏特化。注意函数模板不能偏特化,因为语言不能实现。模板的特化可以通过函数的重载实现,而函数模板则不能。

模板模板参数


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第19张图片
模板模板参数


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第20张图片
模板模板参数


GeekBand C++面向对象高级编程(下) 笔记&心得 1_第21张图片
非模板模板参数

模板模板参数就是将一个模板作为另一个模板的参数。

最后一张图片的list已经确定了,所以不是模板。

你可能感兴趣的:(GeekBand C++面向对象高级编程(下) 笔记&心得 1)