运算符重载基本操作及编写(+,-,/)

基本运算符的重载(+,-,/):
在以下简单程序中,将减法重载为类成员函数,注意这里的加法重载为类的友元函数,友元函数指的是这个函数实质上为全局函数,但是可以访问类的私有成员,用关键字friend 来标记。
1,重载运算符:返回值类型 operator 所重载的符号(参数列表)
以下面的代码为例:
参数 是类类型的变量,其中加&是能够节省空间,加快执行效率,共享同一内存;
在重载函数里面返回的是临时类变量,形式用的是类型名()的形式;


 #include <iostream>
 using namespace  std;
 class complex{
 	private:
 		double real,imag;
 	public:
 		complex(){real=0;imag=0;}
		complex(double x1,double x2){real=x1;imag=x2;}
		double getreal(){return real;}
		double getimag(){return imag;} 
		complex  operator-( complex &s);
	    friend 	complex operator /(complex &c1,complex &c2);//这里是利用友元函数进行重载,不是类的成员函数却可以访问类的私有成员	
 };
   complex  operator+( complex &a1,complex &a2)//另外一个这里的不能加const,原因就是不能再有const函数中进行运算;!!!! 
   {
   	  return  complex(a1.getreal()+a2.getreal(),a1.getimag()+a2.getimag());
   }
    complex  complex::operator-(complex &a2)   //注意这里面是产生临时类且是以构造函数的形式来返回的!!!! 
   {
  	   return complex(getreal()-a2.getreal(),getimag()-a2.getimag());
  }
    complex operator / (complex &c1,complex &c2)   //由于不是类的成员,所以不需要::  这里的complex是返回值对象类型!!!!!!!!! 
     {
     	return complex(c1.getreal()/c2.getreal(),c1.getimag()/c2.getimag());
	 }
  int main()
  {
  	complex a(6,4),b(3,2),c;
  	c=a+b;//这里对“+”进行了重载,注意一下 
  	cout<<c.getreal()<<"+"<<c.getimag()<<"i"<<endl;
  	c=a-b;//这里对减法进行了重载!!!!!! 
  	cout<<c.getreal()<<"-"<<c.getimag()<<"i"<<endl;
  	c=a/b;
  	cout<<c.getreal()<<"/"<<c.getimag()<<"%"<<endl;
  	return 0;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是代码实现: ``` #include<iostream> using namespace std; class Complex{ private: double real; // 复数的实部 double imag; // 复数的虚部 public: Complex(double r = 0, double i = 0) :real(r), imag(i) {} // 构造函数 Complex operator + (const Complex& c2) const{ // 加法重载 return Complex(real + c2.real, imag + c2.imag); } Complex operator - (const Complex& c2) const{ // 减法重载 return Complex(real - c2.real, imag - c2.imag); } Complex operator * (const Complex& c2) const{ // 乘法重载 return Complex(real * c2.real - imag * c2.imag, real * c2.imag + imag * c2.real); } Complex operator / (const Complex& c2) const{ // 除法重载 double denominator = c2.real * c2.real + c2.imag * c2.imag; return Complex((real * c2.real + imag * c2.imag) / denominator, (imag * c2.real - real * c2.imag) / denominator); } Complex operator ++ () { // 前置自增运算符重载 ++real; return *this; } Complex operator -- () { // 前置自减运算符重载 --real; return *this; } Complex operator ++ (int) { // 后置自增运算符重载 Complex temp = *this; real++; return temp; } Complex operator -- (int) { // 后置自减运算符重载 Complex temp = *this; real--; return temp; } friend ostream& operator << (ostream& out, const Complex& c){ // 输出运算符重载 out << c.real << "+" << c.imag << "i"; return out; } friend istream& operator >> (istream& in, Complex& c){ // 输入运算符重载 cout << "请输入实部和虚部:"; in >> c.real >> c.imag; return in; } operator double() const{ // double转Complex运算符重载 return real; } }; int main(){ Complex c1(1, 2), c2(3, 4); cout << "c1 = " << c1 << endl; cout << "c2 = " << c2 << endl; Complex c3 = c1 + c2; cout << "c1 + c2 = " << c3 << endl; Complex c4 = c1 - c2; cout << "c1 - c2 = " << c4 << endl; Complex c5 = c1 * c2; cout << "c1 * c2 = " << c5 << endl; Complex c6 = c1 / c2; cout << "c1 / c2 = " << c6 << endl; ++c1; cout << "++c1 = " << c1 << endl; --c1; cout << "--c1 = " << c1 << endl; c1++; cout << "c1++ = " << c1 << endl; c1--; cout << "c1-- = " << c1 << endl; double d = 5.6; Complex c7 = d; cout << "c7 = " << c7 << endl; Complex c8; cin >> c8; cout << "c8 = " << c8 << endl; return 0; } ``` 这个程序定义了一个 `Complex` 类,其中包含了 `real` 和 `imag` 两个私有成员变量,代表复数的实部和虚部。 程序中重载了加减乘除、前置后置自增自减、输出和输入运算符,实现了复数的基本运算和输出输入功能。 此外还重载了一个运算符,将 `double` 类型的数转换成 `Complex` 类型。 在 `main` 函数中,我们创建了两个 `Complex` 类型的对象 `c1` 和 `c2`,并对它们进行了加减乘除、自增自减、输出输入等操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值