C++に混在する演算子の再ロード

2391 ワード

例:通常のリロード:
#include
using namespace std;
class Complex
{
public:
  Complex();//    //     
  Complex(double r,double i);
  //     ,         private    
  
  Complex complex_add(Complex &d);//       
  void print();
private:
  double real;
  double imag;
};
/*      ,          ,         ,
 *     , ::  。               
 *      。
 */
Complex::Complex()
{
  real=0;
  imag=0;
}
Complex::Complex(double r,double i)
{
  real=r;
  imag=i;
}
Complex Complex::complex_add(Complex &d)
/*          Complex Complex_add(Complex &d)
 *  error: ‘double Complex::real’ is private
 *::      
 *   Complex     。
 */
{
  Complex c;
  c.real=real+d.real;
  c.imag=real+d.imag;
  return c;
}
void Complex::print()
{
  cout<< "(" << real << "," << imag << "i)
"<

上記の例では、通常のリロード関数が使用されていることが明らかになったため、コードは読みにくく、演算子のリロードが採用されています.
#include
using namespace std;
class Complex
{
public:
  Complex();//    //     
  Complex(double r,double i);
  //     ,         private    
  
  Complex operator+(Complex &d);//       
  void print();
private:
  double real;
  double imag;
};
/*      ,          ,         ,
 *     , ::  。               
 *      。
 */
Complex::Complex()
{
  real=0;
  imag=0;
}
Complex::Complex(double r,double i)
{
  real=r;
  imag=i;
}
Complex Complex::operator+(Complex &d)
/*          Complex Complex_add(Complex &d)
 *  error: ‘double Complex::real’ is private
 *::      
 *   Complex     。
 */
{
//  Complex c;
//  c.real=real+d.real;
//  c.imag=real+d.imag;
//  return c;
    return Complex(real+d.real,real+d.imag);
}
void Complex::print()
{
  cout<< "(" << real << "," << imag << "i)
"<