【无标题】侯捷老师c++课程笔记 (面向对象高级编程4)

本文探讨了C++中友元操作符重载、转换函数的作用,包括fraction类型转换、explicit关键字的应用,以及智能指针(*sp)操作符的特殊性。还介绍了迭代器和仿函数的概念,深入剖析了如何影响编译器的选择和代码行为。
摘要由CSDN通过智能技术生成

转换函数:(没有返回类型) operator 类型(无参)const{return (类型) 。。。}       一般会加const,转换类型只改变类型不改变数值。  下面的d=4+f 编译器的编译过程是先去找友元操作符重载函数把+重载为左边参数是double类型,右边参数是fraction类型,没找到,又去找能不能把fraction转为double的函数,结果找到了,就直接调用了。

只要认为合理,可以写多个转换函数,只要让编译器像下面那个例子一样认得就可。

无explicit单实参构造函数。如下,虽然重载了+,但4不是fraction类型的,就调用无explicit构造把4转化为fraction(4,1),也就是1分之4.上面的是把fraction类型转换为其他类型,这里是把其他类型转换为fraction类

  

 如下,编译器有两条路可以走,一条是通过fraction(4,1)把4转换为fraction类然后相加然后调用重载后的+把4和f相加,第二条是通过把f转换成double类型然后与4相加,结果再通过fraction()构造函数转换成fraction类型。 编译器不知道怎么选择,故报错。

 基于以上不人性化的内容引入了关键字explicit的概念   

关键字explicit用到的地方百分之99都是转换函数,其他基本用不到

如下,编译器不会自动的调用转换函数

智能指针(pionter-like classes 粗俗翻译是像指针的类):*sp时通过左边的重载使得他变成了*px,而sp->method()如果说重载->使得sp变成了px,那么这个->已经消耗了,从而使sp->method()变成了pxmethod,语法就不通了啊,侯老师是这么解释的,->这个操作符很特别,它重载之后会继续作用下去。 

 

关于迭代器:链表容器的迭代器关于智能指针的应用

 

 仿函数(function-like classes 像函数的类):就是在类或结构体内重载()使得对象看起来像函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值