zoukankan      html  css  js  c++  java
  • C++之运算符重载(二元)

    一、加号+

    1.成员函数重载

    2.友元函数重载

    二、输出符号<<

    三、索引符号 [ ]

    四、补充说明

    1.《二元运算符重载》课程评论:

    (一)为什么<<运算符的重载必须定义为友元

    如果在类中定义非友元成员函数,默认第一个参数默认会传入this*指针,这时就无法实现cout在前<<对象在后的格式

    因为二元运算符中的调用格式是 参数一 运算符 参数二

    这也就是为什么 加号运算符可以使用非友元成员函数,因为参数一是一个this*指针,参数二是其它对象

    假设定义为非友元成员函数,那么第一个参数系统默认为this*(且无法更改),第二个参数是cout

    那么调用格式就变成了 coor << cout了,这就是不能定义为非友元成员函数的原因

    (二)
    这里对于输出运算符重载讲得一般,当时课程上学习的时候,这里返回值为out是有原因的。

    cout<<coor1<<coor2<<endl;

    上面这个例子中,第一次重载<<的时候cout作为第一个参数,coor作为第二个参数,返回出来out的引用,这个out引用的是"cout<<coor1",

    第二次重载的时候是将这个cout<<coor1整个作为out流对象,做成第一个参数。

     


    2.《二元运算符重载》课程评论:

    来吧!让我给您们解释一下为什么<<只能友元,而[]只能成员重载;

    简而言之:

    <1> 对于友元重载没有this指针指向当前对象的!这个可以从单目运算符重载时返回形参而不能返回this可知!

    所以必须为参数一+运算符+参数二出现的表达式才能用友元!

    <2> 二元运算符的成员函数重载,或一元运算符成员函数重载,默认在符号前有个this指针,指向当前对象的!

    这也就为什么,二元重载还需有一参,一元重载不用参!

    好了~~~这就很好解释,若<<采用成员函数重载,那么this指针指向的是cout!这是错误的~~~this无法实例;其次[]采用友元,那就没有第二参数了~~~

     

    3.对于输出运算符“<<”来说,传入的第一个参数必须是ostream,不能是this指针,所以输出符号“<<”不能通过成员函数重载,必须使用friend友元函数进行重载。

     


    4.索引运算符“[]”不能采用友元函数重载 原因??

    友元函数重载的第一个参数可以是成员函数重载中的this指针也可以是其他的值,可是索引运算符的第一个参数必须是this指针,

    因为只有第一个参数是this指针才能够传入索引,才能够使得这个索引所表达的是当前这个对象当中的成员

  • 相关阅读:
    加油站
    UIScrollView控件实现图片轮播
    键值编码 KVC
    键值观察 KVO
    弹出视图集合
    关于Page翻页效果, PageViewConrtoller
    Event Handling Guide for iOS--事件驱动指南
    远程控制
    耳机线控
    ASI框架的使用
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9678276.html
Copyright © 2011-2022 走看看