c++通过定义虚数类实现加号、左右移等操作运算符的重载,可cout、cin虚数

原创 2018年04月15日 20:45:56
#include<iostream>
using namespace std;

class Complex
{
public:
//无参构造
Complex()
{
this->r = 0;
this->v = 0;
}
//有参构造
Complex(int r,int v)
{
this->r = r;
this->v = v;
}
//打印值
void print()
{
if(v>0)
{
cout<<r<<"+"<<v<<"i"<<endl;
}
else
{
cout<<r<<"-"<<v<<"i"<<endl;
}
}
//调用成员函数的相加方法,也是一种常规的办法
Complex add(Complex another)
{
Complex temp(this->r+another.r,this->v+another.v);
return temp;
}
//都是加号的重载,减号一个道理
//+号运算符的重载,创建一个临时变量返回,避免覆盖某一个对象
Complex operator+(Complex another)
{
Complex temp(this->r+another.r,this->v+another.v);
return temp;
}
//+=操作运算符的重载,返回的对象仍然是自己
Complex& operator+=(Complex another)
{
this->r += another.r;
this->v += another.v;
return *this;//因为this是指针,*this就是当前对象
}
//++操作运算符重载,返回的对象仍然是自己,并且可以可以写成++++a
Complex& operator++()//形如++a
{
this->r++;
this->v++;
return *this;
}
//++操作运算符重载,返回的对象仍然是自己,但不能写成a++++
const Complex& operator++(int)//形如a++
{
//这里的int只是哑元参数,并没作用,但没这个就不能实现后置++重载
++this->r;
++this->v;
return *this;
}
//==的重载,返回一个tag
bool operator==(Complex another)
{
if(this->r==another.r&&this->v==another.v)
{
return true;
}
else
{
return false;
}
}
//<<和>>的重载,即用cout、cin输出输入Complex
friend ostream& operator<<(ostream& os,Complex c);
friend istream& operator>>(istream& is,Complex &c);

private:
//实部和虚部
int r;
int v;
};
//cout最好写在外面,不然调用的时候会变成 c << cout;非常奇怪。
//cout是一个ostream对象,而且支持多<<
ostream& operator<<(ostream& os,Complex c)
{
if(c.v>0)
{
cout<<c.r<<"+"<<c.v<<"i";
}
else
{
cout<<c.r<<"-"<<c.v<<"i";
}
return os;
}
//cin的重载
istream& operator>>(istream& is,Complex &c)
{
cout<<"实部:"<<endl;
int r;int v;
cin>>r;
cout<<"虚部:"<<endl;
cin>>v;
c.r = r;
c.v = v;
return is;
}



int main(void)
{
Complex a(1,1);
Complex b(2,2);
//Complex c = a.add(b);//常规方法
Complex c = a+b+b;
c.print();
cout<<"---"<<endl;
a.print();
//三种+1方法
a += a;
a++;
++a;
//(a+=b)+=b;//这个也能运算
a.print();
cout<<a<<endl;
//==操作符
cout<<(a==b)<<endl;
cout<<(a==a)<<endl;
//cin测试
Complex cc;
cin>>cc;
cout<<"cc= "<<cc<<endl;
return 0;
}

版权声明: https://blog.csdn.net/hiudawn/article/details/79953020

2015年oj刷题:实现复数类中的加运算符重载【C++运算符重载】

Problem A: 实现复数类中的加运算符重载【C++运算符重载】 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 184  Solved: 12...
  • liyingjie01
  • liyingjie01
  • 2015-06-17 08:15:34
  • 473

C++的iostream标准库介绍以及对左移与右移运算符的重载

C++的iostream标准库介绍以及对左移与右移运算符的重载 ...
  • yfw418
  • yfw418
  • 2007-06-14 19:29:00
  • 1042

C/C++ 重载+运算符重载加号 实现矩阵相加

#include #include using namespace std; class Complex { private: int i,j,n,a[2][3]; p...
  • hubaoquanu
  • hubaoquanu
  • 2016-06-07 21:12:07
  • 8376

【C++】String类中的运算符重载

模块化设计: 头文件: #ifndef operator_operator_h #define operator_operator_h #include #include ...
  • Irean_Lau
  • Irean_Lau
  • 2015-06-07 14:29:47
  • 6587

设计一个string类,通过重载“+=”运算符,实现对两个string类对象m1,m2的操作。

#include class string { private:  int x,y; public:  string(){}  string(int a,int b)  {   x=...
  • liu_111111
  • liu_111111
  • 2011-11-29 17:56:27
  • 873

【c++】实现"String"类,完成运算符重载等

编译环境:linux,vs2012 Main.cpp #include #include "String.h" using namespace std; int main() { String...
  • qq_30594349
  • qq_30594349
  • 2017-02-11 15:25:28
  • 362

C++纯虚数和抽象类

  • 2009年04月19日 23:58
  • 810B
  • 下载

C++复数运算的运算符重载

C++提供了运算符重载,极大地方便了自定义类型之间的运算, 本文就最简单的复数运算实现让初学者体会运算符重载的作用以及运算符重载的原理。...
  • Raito__
  • Raito__
  • 2015-07-19 09:07:22
  • 3688

浅谈C++中用友元函数的方法实现复合运算符(+=等)的重载方法

在写到重载复合运算符的题目时,用成员函数的方法比较容易实现。但是题目中还要求使用友元函数的方法实现,于是就卡在这里了。调试了数次后未果,于是上网翻阅资料,发现网上关于使用友元函数的方法实现复合运算符的...
  • toky2012
  • toky2012
  • 2014-11-25 19:25:36
  • 941

C++_重载运算符<< ostream流重载注意事项_使自定义数据可以用cout输出

通过重载运算符 出错的片段const ostream& operator
  • u010003835
  • u010003835
  • 2015-08-11 15:04:48
  • 2166
收藏助手
不良信息举报
您举报文章:c++通过定义虚数类实现加号、左右移等操作运算符的重载,可cout、cin虚数
举报原因:
原因补充:

(最多只允许输入30个字)