conversion function 转换函数
operator double() const {};
转换的类型可以使任何类型,只要先前出现过,编译器认得即可。
关键字:explicit 用的比较少,用在构造函数前面,表示构造函数只能用于构造,不能用于转换。
pointer-like classes
类像指针
关于智能指针
做一个比原指针更聪明的指针。
sp->method();
->作用在sp上,得到的结果为px,得到的结果要继续用->作用上去。
结果为:px->method();
关于迭代器
操作符重载很重要!
function-like classes 仿函数
类像函数。它创建的对象调用()成员函数的方式与函数调用相同,它创建的对象就叫做函数对象。
标准库中,仿函数会继承一些奇特的base classes:unary_function,binary_function.
namespace 经验谈
类模板
函数模板
成员模板
模板特化
特殊化,特化可以有任意的版本
模板偏特化
局部特化,
个数的偏
两个不确定类型->一个不确定类型
范围的偏
任意类型->指针
模板模板参数
关于C++标准库
年轻的经验:容器和算法最好都要手写小实例测试一下。加油!
variadic templaes 数量不定的模板参数 1个和1包
看1包是几个:sizeof…(args)
auto 编译器推导
ranged-based for
for(decl :coll) {
statement
}
reference 是一种漂亮的指针
object 和其reference的大小相同,地址也相同,是编译器制造出来的假象。
引用底部只是指针,32位电脑上就是四个字节,可是编译器制造出一种假象,使得它和object的大小相同。
通常不用于声明变量,而用于参数类型和返回类型的描述。
object modal 对象模型
继承不仅要继承数据,也要继承函数,继承函数继承的是它的调用权,而不是它的内存大小。
vptr 虚指针 vtbl 虚表
vptr指向vtbl,vtbl放的是函数指针,指向虚函数。
函数调用:
静态绑定(call 地址) :调用某个地址;
动态绑定(虚机制):三个条件:通过指针调用;指针向上转型(声明时指向父类,new(实际创建)的时候指向子类);调用的是虚函数。p指向哪个对象决定了调用哪个虚函数。
多态 :所有的指针都是声明的指向A,可是最终它们指向不同的东西,其中这些东西都属于A。例如:list<A*> myLst;
多态 虚函数 动态绑定其实是说的同一件事情。
动态绑定
this
虚函数用法:多态 模板方法(设计模式)
C++所有成员函数都有一个隐藏的this指针作为参数。
重载 ::operator new ::operator delete ::operator new[] ::operator delete[]
全局函数重载
编译器调用
重载 member operator new operator delete operator new[] operator delete[]
成员函数
重载new() delete()
new的种类:new表达式,operator new,operator new[],new()