侯捷面向对象高级编程(二)

侯捷面向对象高级编程(二)

转换函数

image-20210717081420569

  • 转换函数没有返回值,返回值就是double即函数名,不需要自己写
  • 因为转换函数一般不会改变其中内容,所以要加const限定

image-20210717110659284

  • 两条路都可以走,就回产生歧义,报错

image-20210717111125710

  • explict禁止自动转换,于是4无法转转换为Fraction

pointer-like cliasses

image-20210717112102500

  • ->作用之后还能继续作用不会消耗掉
  • *sp中的*作用于sp上后返回*px,而->作用后不会消失

image-20210717112713061

function-like classes,仿函数

image-20210717113348179

image-20210717113359183

image-20210717113407978

namespace 命名空间

image-20210717114338669

放在不同命名空间,让彼此没有关联

class template

image-20210717114504467

function template

image-20210717114614047

member template

image-20210717114922738

即使T1,T2确定了,U1,U2也可以变

image-20210717115318473

可以嵌套,但是p.first必须能给first赋值,即U1,U2是T1,T2的子类

再举一个例子,同理

image-20210717115557613

specialization 模板特化

image-20210717115743306

我的理解就是,对不同的类型,采取有不同的行为

partial specialization 模板偏特化

image-20210717120108789

事先绑定一个参数

image-20210717120325286

  • 如果不使用指针就用上面的情况 obj1
  • 如果使用指针就用右下的情况 obj2

数量不定的模板参数

image-20210717121044392

print是递归调用,能打印出全部元素

void print() // 最后一个元素打印时调用
{}
template<typename T ,typename... Types>
void print(const T& first,const Types&... args)
{
	std::cout << first<<std::endl;
	print(args...);
}
int main()
{
	print(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
}

虚函数,虚指针

image-20210717122643409

一种理解:继承中函数继承的是调用权

const

image-20210717124511792

函数后面加const只用于成语函数

image-20210717124519464

COW: copy on write

image-20210717130527254

image-20210717130637939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值