c++运算符重载

#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;} //无参构造
   Complex(double r,double i){real=r;imag=i;}//带参构造
   double get_real();
   double get_imag();
   void display();
  private:
   double real;
   double imag;
 };
double Complex::get_real()
{return real;}
double Complex::get_imag()
{return imag;}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
Complex operator + (Complex &c1,Complex &c2)
{
 return
Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
int main()
{Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c3=";
 c3.display();
 return 0;
}

//一般将单目和复合运算符(+=,-=,!=,>>=)重载为成员函数

//一般将双目运算符重载为友元函数


#include <iostream>        //用 VC++时改为∶ #include <iostream.h> 友元函数
using namespace std;      //用 VC++时为取消此行
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator+(Complex &c2);
   Complex operator+(int &i);
   friend Complex operator+(int&,Complex &);
   void display();
  private:
   double real;
   double imag;
 };
Complex Complex::operator+(Complex &c)
{return Complex(real+c.real,imag+c.imag);}
Complex Complex::operator+(int &i)
{return Complex(real+i,imag);}
void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
Complex operator+(int &i,Complex &c)
{return Complex(i+c.real,c.imag);}
int main()
{Complex c1(3,4),c2(5,-10),c3;
 int i=5;
 c3=c1+c2;
 cout<<"c1+c2=";
 c3.display();
 c3=i+c1;
 cout<<"i+c1=";
 c3.display();
 c3=c1+i;
 cout<<"c1+i=";
 c3.display();
 return 0;
}


//转换构造函数:(将一个其他类型(肯定包括类类型了)的数据转换成一个类的对象p.332)

转换构造函数只能有一个参数,Complex(double r){real=r;imag=0;}

现在可以Complex c=c1+(Complex)2.3

//类型转换函数:同上反,将一个类的对象转换成另一个类型的数据)

在函数名前不能指定函数类型,没有参数:operator double(){return real;}

现在可以double d=2.3+c1;




一个包含转换构造函数,类型转换函数,重载运算符+ 的友元函数的例子


#include <iostream>
using namespace std;
class Complex
 {public:
   Complex(){real=0;imag=0;}
   Complex(double r){real=r;imag=0;} //转换构造函数
   Complex(double r,double i){real=r;imag=i;}
   operator double(){return real;} //类型转换函数
   friend Complex operator+(Complex c1,Complex c2);//重载运算符+ 的友元函数
   void display();
  private:
   double real;
   double imag;
 };
Complex operator +(Complex c1,Complex c2)
{ return Complex(c1.real+c2.real,c1.imag+c2.imag);}
void Complex::display()
{cout<<"("<<real<<", "<<imag<<")"<<endl;}
int main()
{Complex c1(3,4),c2;
 double d1;
 d1=2.5+c1;
 cout<<"d1="<<d1<<endl;
 c2=Complex(d1);
 cout<<"c2=";
 c2.display();
 return 0;
}


你可能感兴趣的:(C++,运算符,重载)