美文网首页
2019-07-11 运算符的重载

2019-07-11 运算符的重载

作者: 知成 | 来源:发表于2019-07-11 18:03 被阅读0次

运算符的重载


重载运算符

  • (“::”,“.*”,“.”,“?:”)不能被重载。
  • 重载运算符时,不能改变其本质,如不能将“+”的求和运算重载为作差运算等。
  • 优先级与结合律要与内置运算符保持一致。
  • 若重载的运算符是成员函数时,this绑定到运算符的左侧对象。成员运算符的显式参数比运算对象总少一个。

note:

  • 当把运算符定义为成员函数时,其左侧必须是运算符所属类型的一个对象。
  • 下标运算符(“[]”)需要定义为成员函数。
  • (“++”“--”)分为可分为前置版与后置版,为了区分前置与后置,我们在定义后置版时,加入一个int类型的形参加以区分(内置为0)。“int”的唯一作用就是用来做区分用的。
    eg1:
string s = "word";
string t = s + "!";//等价于s.operator("!");
string u = "hi" + s;//等价于hi.operator(s)因此“<<”不能定义为成员函数

eg2:以复数的运算为例,我并未曾将所有的形式写完整,但是主体形式以经成型,剩下的基本用Ctrl+CV就能解决

#include<iostream>
using namespace std;
class Cplural 
{
public:
    void SetPlural(int a,int b);
    void GetPlural();
    //重载输入输出运算符
    friend ostream &operator <<(ostream &os, const Cplural &plural);
    friend istream &operator >> (istream  &is, Cplural &plural);
    //重载算术运算符 在此以+为例,— * / %等同理
    //在此使用非成员函数形式
    friend Cplural &operator+(const Cplural &plural1, const Cplural &plural2);
    //== !=的重载
    friend bool operator ==(const Cplural &plural1, const Cplural &plural2);
    friend bool operator !=(const Cplural &plural1, const Cplural &plural2);
    //递增 递减运算符的重载 在此仅以递增为例
    Cplural &operator++();
    Cplural &operator++(int);



private:
    int a;  //实部
    int b;  //虚部
};

void Cplural::SetPlural(int a,int b)
{
    this->a = a;
    this->b = b;
}

void Cplural::GetPlural()
{
    
}

Cplural & Cplural::operator++()
{
    // TODO: 在此处插入 return 语句
    ++this->a;
    ++this->b;
    return *this;
}

Cplural & Cplural::operator++(int)
{
    // TODO: 在此处插入 return 语句
    this->a++;
    this->b++;
    return *this;
}

ostream & operator<<(ostream & os, const Cplural & plural)
{
    // TODO: 在此处插入 return 语句
    os << plural.a << " + " << plural.b << "i";
    return os;
}

istream & operator >> (istream & is, Cplural & plural)
{
    // TODO: 在此处插入 return 语句
    is >> plural.a >> plural.b;
    if (!is)
    {
        plural.a = 0;
        plural.b = 0;
    }
    return is;
}

Cplural & operator+(const Cplural & plural1, const Cplural & plural2)
{
    // TODO: 在此处插入 return 语句
    Cplural temp;
    temp.a = plural1.a + plural2.a;
    temp.b = plural1.b + plural2.b;
    return temp;
}

bool operator==(const Cplural & plural1, const Cplural & plural2)
{
    // TODO: 在此处插入 return 语句
    if (plural1.a == plural2.a && plural1.b == plural2.b)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool operator!=(const Cplural & plural1, const Cplural & plural2)
{
    // TODO: 在此处插入 return 语句
    if (plural1.a != plural2.a && plural1.b != plural2.b)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    Cplural a1,a2,a3;
    a1.SetPlural(5, 6);
    a2.SetPlural(3, 4);
    a3.SetPlural(3, 4);
    /*a1++;
    ++a2;*/
    cout << a1++ << "   " << ++a2;
    getchar();
    getchar();
    return 0;
}

相关文章

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 运算符重载及其他约定

    7.1 重载算术运算符 重载二元算术运算符 重载复合赋值运算符 重载一元运算符 重载比较运算符 等号运算符:‘eq...

  • 2019-07-11 运算符的重载

    运算符的重载 重载运算符 (“::”,“.*”,“.”,“?:”)不能被重载。 重载运算符时,不能改变其本质,如不...

  • C++重载

    重载 C++语言规定: 重载的运算符要保持原运算符的意义。只能对已有的运算符重载,不能增加新的运算符。重载的运算符...

  • C++运算符重载-下篇 (Boolan)

    C++运算符重载-下篇 (Boolan) 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符...

  • C++运算符重载-上篇 (Boolan)

    C++运算符重载-上篇 (Boolan) 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符...

  • C++运算符重载详解

    运算符重载规则 1.被重载的运算符必须是已经存在的C++运算符,不能重载自己创建的运算符; 2.运算符被重载之后,...

  • 运算符重载

    一.+号运算符重载 二.<<号运算符重载 三.指针运算符重载(智能指针)

  • 第十一章 使用类

    运算符重载 运算符重载是一种形式的C++多态。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。...

  • 4.0 C++远征:重载运算符

    重载运算符 [TOC] 四、重载运算符 ​ 概念 : 给原有运算符赋予新功能。 ​ 本质 : 函数重载。 ...

网友评论

      本文标题:2019-07-11 运算符的重载

      本文链接:https://www.haomeiwen.com/subject/iitjkctx.html