C++程序设计兼谈对象模型(侯捷)【二】

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()

上一篇:Java笔记 Operator


下一篇:C++(5)——拷贝构造函数,运算符重载