重载

C++运算符的重载

1.基本概念

  运算符的重载是具有特殊名字的函数,他们的名字由关键字operator和运算符号决定

重载运算符的参数数量与该运算符的运算对象数量一样多,对于二元运算符,左侧的对象传

给第一个参数,右侧的对象传给第二个参数。

  如果运算符函数时成员函数,第一个对象自动绑定到this指针上,所以,成员函数的参

数数量比一般重载函数少一个。

2.不能重载的运算符

  域运算符(::),类成员访问运算符(.),类成员指针访问运算符(.*),

  长度运算符(sizeof),条件运算符(?:)

3.C++不建议重载的运算符

  && || 逗号 &

  原因::重载的本质是一次函数的调用,而这些运算符指定了运算对象取值的顺序,而

这些规则无法运用到重载的运算符上,而且会使&& || 失去短路属性。

4.重载输出运算符

  直接看栗子

friend ostream& operator <<(ostream &os,
                                const Link<T> &list)
    {
        node<T> *_node = list.head->next;
        while(_node != nullptr)
        {
            os << _node->data << ",";
            _node = _node->next;
        }
        //os << std::endl;
        return os;
    }

  第一个参数是非常量的引用,向流中写入数据会改变流的状态,所以不能是常量,我们无法复制一个流对象,所以要用引用

在注释中,我进行了换行,这时不好的操作,这时在调用重载函数的函数里面直接cout << link; 就会产生换行效果,显然不符合

我们的习惯。

  为什么是友元函数呢,成员函数的第一个参数默认绑定this指针上,可是输入输出函数的左侧一般是一个流对象,这时,发生

冲突,所以不能把输入输出重载运算符函数设定为成员函数,为了能读写类的私有成员,我们将其设置为友元函数。

5.重载下标运算符

  下标运算符[]可以使用下标来来访问容器中元素的任意位置。

直接看栗子  

T &operator[](size_t n)
    {
        return vec[n];
    }

  返回值为引用,是希望用户可以使用下标运算符来操作容器中的元素。

  注意:下标运算符必须是成员函数。

6.递增和递减运算符

  没有什么好说的,唯一注意的是,前置++或者--,调用operator++(),operator--()

  后置则调用operator++(int),operator++(int).

posted @ 2017-04-05 20:52  是召不是昭  阅读(144)  评论(0编辑  收藏  举报