混迹于C++ 之运算符重载

示例:常规的重载:

#include<iostream>
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)\n"<<endl;
}

int main()
{
  Complex c1(3,4),c2(5,-10),c3(1,-1),c4;
  c4=(c1.complex_add(c2)).complex_add(c3);
  cout<<"c1="<<endl;
  c1.print();
  cout<<"c2="<<endl;

  c2.print();
  cout<<"c3="<<endl;  
  c3.print();
  std::cout<<"c1+c2+c3=";
  c4.print();
  //c3::print();error: ‘c3’ is not a class or namespace
  //c3为一个具体的对象。
  
  return 0;
}


由于上例子中明显可以看到使用常规的重载函数,代码不易于阅读,采用了
运算符重载

#include<iostream>
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)\n"<<endl;
}

int main()
{
  Complex c1(3,4),c2(5,-10),c3(1,-1),c4;
  c4=c1+c2+c3;
  cout<<"c1="<<endl;
  c1.print();
  cout<<"c2="<<endl;
  c2.print();
  cout<<"c1+c2+c3="<<endl;
  c4.print();
  return 0;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值