zoukankan      html  css  js  c++  java
  • 运算符重载

    定义:对抽象数据类型也能够直接使用C++提供的运算符。运算符重载能够使程序更简洁,代码更容易理解。对已有的运算符赋予多重的含义。

    运算符重载的实质是函数的重载。如果将运算符重载函数作为成员函数,它可以通过this指针自由地访问本类的数据成员,因此可以少写一个函数的参数。但必须要求运算表达式第一个参数(即运算符左侧的操作数)是一个类对象,而且与运算符函数的类型相同。因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数返回值与该对象同类型,运算结果才有意义。

    将双目运算符重载为友元函数时,在函数的形参列表中必须有两个参数,不能省略,形参的顺序任意,不要求第一个参数必须为类对象。但是运算符左侧的操作数与函数第一个操作数对应,运算符右侧的操作数与函数的第二个参数对应。

    返回值类型operator 运算符 (形参表)

    {

    . . . .

    }

    在程序编译时:

    • 把含运算符的表达式转化为对运算符函数的调用
    • 把运算符的操作数转化为运算符函数的参数
    • 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数
    • 运算符可以被重载成普通函数
    • 也可以被重载成类的成员函数

    重载为普通函数时,参数个数为运算符目数。

    重载为成员函数时,参数个数为运算符目数-1。

    运算符还可以重载为友元函数,这样就变成了普通函数。

    代码如下:

    #include <iostream>
    
    using namespace std;
    
    class Complex
    {
    public:
        int real;
        int img;
        Complex(int r, int i):real(r),img(i){}
        Complex operator +(const Complex & a)
        {
            return(Complex(real + a.real, img + a.img));
        }
        void print()
        {
            cout << "the real value is :";
            cout << real << endl;
            cout << "the img value is :";
            cout << img << endl;
        }
    };
    Complex operator - (const Complex &a, const Complex &b)
    {
        Complex c(0, 0);
        c.real = a.real - b.real;
        c.img = a.img - b.img;
        return (c);
    }
    int main()
    {
        Complex a(2, 3), b(3, 4), c(0,0);
        c = a + b;
        a.print();
        b.print();
        c.print();
        c = a - b;
        a.print();
        b.print();
        c.print();
        return 0;
    }

     参考链接:

    https://www.coursera.org/learn/cpp-chengxu-sheji

  • 相关阅读:
    css 移动端像素,rem适配详解
    css,图片和文字在父元素垂直居中,且图片和文字在中线对齐排列的几种方式
    css弹性盒子桃园三兄弟之:flexgrow、flexshrink、flexbasis详解
    less的基本使用
    css 利用flex居中对齐
    css 高度塌陷和外边距折叠问题详解,(BFC)
    HTML行内元素、块状元素、行内块状元素的区别
    css flex弹性布局学习总结
    shell学习笔记
    Ant入门教程
  • 原文地址:https://www.cnblogs.com/helloforworld/p/5652881.html
Copyright © 2011-2022 走看看