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

    前言

    ……

    这篇博客可能会比较短,但是这应该是我研究最久的博客之一了。

    思考起因

    首先看到这道题,因为位数明显会很大,所以第一个要想到的就是这道题要用到高精。

    当然,用到高精度的题很多。

    而这道题还要用到快速幂。

    同时用到高精和快速幂的题目也很多。

    的确。

    众所周知,在快速幂运算中,要多次用到乘法。所以乘法的简洁性很重要,否则,程序写起来会很麻烦。而我们只想写这样的快速幂:

    int poww(int a, int b) 
    {
        int ans = 1, base = a;
        while (b != 0) 
       {
            if (b & 1 != 0)
                ans *= base;
                base *= base;
                b >>= 1;
        }
        return ans;
    }

    以后更难的题中,我们还要用到更多高精乘法。

    那怎么办呢?

    这就用到我们的运算符重载了。

    研究历程

    再讲讲我的研究历程吧。

    先是想到要用重载运算符,觉得应该和重载函数是一样的,就自己先写了这个:

    string operator*(string a,string b)
    {
        ……
    }

    发现不太行。

    于是从网上找资料:

    #include <iostream>
    using namespace std;
     
    class Box
    {
       public:
     
          double getVolume(void)
          {
             return length * breadth * height;
          }
          void setLength( double len )
          {
              length = len;
          }
     
          void setBreadth( double bre )
          {
              breadth = bre;
          }
     
          void setHeight( double hei )
          {
              height = hei;
          }
          // 重载 + 运算符,用于把两个 Box 对象相加
          Box operator+(const Box& b)
          {
             Box box;
             box.length = this->length + b.length;
             box.breadth = this->breadth + b.breadth;
             box.height = this->height + b.height;
             return box;
          }
       private:
          double length;      // 长度
          double breadth;     // 宽度
          double height;      // 高度
    };
    // 程序的主函数
    int main( )
    {
       Box Box1;                // 声明 Box1,类型为 Box
       Box Box2;                // 声明 Box2,类型为 Box
       Box Box3;                // 声明 Box3,类型为 Box
       double volume = 0.0;     // 把体积存储在该变量中
     
       // Box1 详述
       Box1.setLength(6.0); 
       Box1.setBreadth(7.0); 
       Box1.setHeight(5.0);
     
       // Box2 详述
       Box2.setLength(12.0); 
       Box2.setBreadth(13.0); 
       Box2.setHeight(10.0);
     
       // Box1 的体积
       volume = Box1.getVolume();
       cout << "Volume of Box1 : " << volume <<endl;
     
       // Box2 的体积
       volume = Box2.getVolume();
       cout << "Volume of Box2 : " << volume <<endl;
     
       // 把两个对象相加,得到 Box3
       Box3 = Box1 + Box2;
     
       // Box3 的体积
       volume = Box3.getVolume();
       cout << "Volume of Box3 : " << volume <<endl;
     
       return 0;
    }
    #include<iostream>
    using namespace std;
    class complex { //复数类
    public: //外部接口
     complex(double r = 0.0, double i = 0.0) { real = r; imag = i; } //构造函数_ 
     const complex operator+(const complex &c) const ;
     
     const complex operator - (const complex &c) const;
     void display(); //输出复数
    private: //私有数据成员
     double real;  //复数实部
     double imag;  //复数虚部
    };
     
    const complex complex:: operator+(const complex &c) const {
     return complex(real + c.real, imag + c.imag);
    }
     
    const complex complex:: operator-(const complex &c) const {
     return complex(real - c.real, imag - c.imag);
    }
    void complex::display() {
     cout << "(" << real << "," << imag << " i)" << endl;
    }
    void main() {
     complex c1(5, 4), c2(2,
    10), c3; //三个复数类的对象
     cout << "c1="; c1.display();
     cout << "c2="; c2.display();
     c3 = c1 + c2; //使用重载运算符完成复数减法
     cout << "c3=c1+c2=";
     c3.display();
     c3 = c1 - c2; //使用重载运算符完成复数加法
     cout << "c3=c1-c2=";
     c3.display();
    }

    全都是这种。

    这些东西,让我这个连类都不知道是什么的蒟蒻怎么看得懂?!

    继续不停的翻找,还都是这些。

    突然,灵光一现——

    以前我在上清北学堂的时候,老师讲过大于、小于号的重载!

    于是又返回去看:

    终于找到了!就是这个!

    正文

    这只是一个记录学习历程的博客,所以正文很短。

    所以我们要写的重载高精度乘法就是这样:

    string operator*(const string &a,const string &b)
    {
        ……
        return ……;
    }

    还有这个:

    ……恩,就这些……

  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/genshin/p/12775590.html
Copyright © 2011-2022 走看看