一.转换函数 operator double()const{}
注意点:
first 转换函数一般都要加上const
second 转换函数的返回类型一般都是所要转换的类型
且不无需定义返回类型
three 转换函数应该注意二义性 与操作符重载冲突
问题:
1.为什么分子没有默认参数??
数学的习惯 1/5
2.转换回来的问题...
no explicit one argument ctor
二.单实参函数
单实参具有自动转换功能(把一个实参类型自动转换为此类)
这个功能可能会使操作出现二义性 可以用explicit阻止这个行为
问题
代理设计模式?
pointer-like
智能指针的实现
他是一个带指针的类 所以要遵循指针类的规则
一般来说他 要重载* 和->两个指针
->符号 会一直作用下去
迭代器
++ -- * -> == !=
function like
operator()重载 函数对象
pair class
三.namespace
namespace jj01
{
}
namespace jj02
{
}
测试的时候
int main
{
jj01::
jj02::
}
函数模板 实参推导
类模板
Member Template 在模板里的类成员 又是模板
up-cast
模板特化template<>class hasn{}
模板偏特化templateclass vector{}
templateclass vector{}
范围上的偏templateclass vector{
}templateclass vector{}
模板模板参数templateclass Container
四.指针动态绑定的三个条件 第一通过指针 第二这个指针向上转型第三动用虚函数静态绑定 callC++多态的实现vectorv;
谁调用函数 谁就是this
(*(this->vptr)[n])(this)
虚函数的两种用法
1.Template model
2.多态
谈谈const
成员函数后面 == 不打算改变class data数据
共享 :当其中一个成员要改变
单独拷贝出一份更改
全局new delete的重载
全局new delete重载不可以在任意的namespace中
在class里面
void* operator new(size_t)
void operator(void* v,size_t)
强制使用全局 ::new(size_t)
new[] 拥有一个size为4 的计数器int 内存传入
new(size_t ,size_t extern) 重载
可以写出对应的delete(void* ,size_t)仅当new时构造函数异常时 才调用重载的delete