2019-07-11 运算符的重载

2019-07-11  本文已影响0人  知成

运算符的重载


重载运算符

note:

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;
}
上一篇下一篇

猜你喜欢

热点阅读