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

1.1.1  conversion function 转换函数


double()是转换函数

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

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


分别将int装为double

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

1.1.2 non-explicit-one-argument ctor


non-explicit-one-argument ctor

Q:为什么是one-argument

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


二义性错误

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


explicit显式声明转换函数

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

STL中的应用:


bool()的converision

小结:  explicit vs non-explicit vs converision

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



1.2 智能指针



智能指针

智能指针也叫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



迭代器,某种智能指针


迭代器,细节



1.3 仿函数


仿函数代码



1.4 namespace


namespace

简单不细说了。

1.5  function template


function-template


member-template


member-template实例


以一组为参数上传


STL中的实例

模板的特化


模板的特化

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

模板的偏特化


模板的偏特化


模板的偏特化

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

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

模板模板参数


模板模板参数


模板模板参数


非模板模板参数

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容