转换函数(双向)
这里实现的是分数转为
double类型(黄色部分为转换函数)
这里是讲
double类型的
4,通过调用蓝色部分的,转换为
4/1的分数类型
这种情况会导致二义性,因为两种转换方式共存
加入了explicit后,
double类型的
4就不会被转为
4/1了,所以报错
pointer-like classes(类模拟指针)
1、智能指针
智能指针其实是一个对象,但智能指针里面肯定是包含着一个真正的指针的!
但也同时,指针所能做的事情,智能指针也是要都能做到的
这里的两个操作符重载是一定要有的,
*和
->
2、迭代器
**对智能指针的理解不够,后续需要再看看
**
回头再看看下面的链接
(https
://blog
.csdn
.net
/qq_17846375
/article
/details
/104626460)
namespace,类、函数、成员模板
注意上图和智能指针的联系
模板这块的知识见这篇博客
模板泛化和特化
偏特化:1、个数的偏;2、范围的偏
模板模板参数
视频
10,11,12,
14再看看
关于标准库
这里的容器存的就是数据结构
reference
是签名的一部分,两个函数一个有
const,一个没有,是可以并存的
虚指针和虚表(面试常问)
A
,B
,C都有两个虚函数,只不过B和C都改写了虚函数
vfunc1()
父类有虚函数,子类一定有
对于继承,数据部分继承的是内存,函数部分继承的是调用权
vtbl
:虚表
vptr
:虚指针
只要类里面有一个(或者一万个)虚函数,对象里面就会多一个指针
虚机制,动态绑定(满足这三点:
1、指针
2、向上转型
3、虚函数),就可以写成中间最下面那种(两行)
多态,虚函数,动态绑定
this
this是一个指针
图中myDoc的地址就是this
**结合前面的虚指针和虚表再看看
**
动态绑定
a
.vfunc1()不是通过指针,是静态绑定(call xxx固定地址)
A* pa = new B;就是向上转型
const
const也是签名的一部分
new和delete及其重载(????)
视频23、24、25再看看
参考