第八週實驗報告(一)《方案三》拓展運算符功能

/*
實驗目的:1.學會定義類中雙目和單目運算符的重載函數
          2.學會使用類的成員函數和友元函數實現運算符的重載
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生 
* All rights reserved.
* 文件名稱:方案一 用類的重載運算符 +、-、*、/,使之能用於複數的加減乘除                              
* 作    者:  晁 陽                            
* 完成日期:  2012年 4 月 9 日
* 版 本 號: t.10         
 
* 對任務及求解方法的描述部分
* 代碼實現
 
#include <iostream>

using namespace std;

class Complex
{
public:
	Complex(){real=0;imag=0;}
	Complex(double r,double i){ real=r;imag=i;}
	friend Complex operator+(Complex &c,const double &d);//聲明重載運算符“+”的函數(複數加實數)
	friend Complex operator+(Complex &c,const double &d);//聲明重載運算符“+”的函數(複數加實數)
	friend Complex operator-(Complex &c,const double &d);//聲明重載運算符“-”的函數(複數加實數)
	friend Complex operator*(Complex &c,const double &d);//聲明重載運算符“*”的函數(複數加實數)	
	friend Complex operator/(Complex &c,const double &d);//聲明重載運算符“/”的函數(複數加實數)
	friend Complex operator + (const double &d, Complex &c);//友元函數聲明(實數加複數)
	friend Complex operator - (const double &d, Complex &c);//友元函數聲明(實數加複數)
	friend Complex operator * (const double &d, Complex &c);//友元函數聲明(實數加複數)
	friend Complex operator / (const double &d, Complex &c);//友元函數聲明(實數加複數)
	friend Complex operator -(Complex &c);//聲明一目運算符“-”函數
	void display();
	void display1();
private:
	 double real;
	 double imag;
};
//下面定義成員函數Complex Complex::operator + (double &d)

 Complex operator + (Complex &c, const double &d)//定義重載運算符“+”的函數
 {
	 Complex c1;
	 return Complex(c1.real= c.real+d, c1.imag = c.imag);
 }

 Complex operator-(Complex &c,const double &d)//定義重載運算符“-”的函數
{ 
	Complex c1;
 return Complex( c1.real = c.real-d, c1.imag = c.imag);
 }

 Complex operator*(Complex &c,const double &d)//定義重載運算符“*”的函數
{
	Complex c1;
	return Complex(c.real*d, c.imag);
 }

 Complex operator/(Complex &c,const double &d)//定義重載運算符“/”的函數
{
	Complex c1;
	return Complex(c.real/d, c.imag);
 }

Complex operator + (const double &d, Complex &c)//定義友元函數(實數+複數)
{
	Complex c1;
	return Complex(c.real+d, c.imag);
}

Complex operator - (const double &d, Complex &c)//定義友元函數(實數-複數)
{
	Complex c1;
	return Complex(c.real-d, c.imag);
}

Complex operator * (const double &d, Complex &c)//定義友元函數(實數*複數)
{
	Complex c1;
	return Complex(c.real*d, c.imag);
}

Complex operator / (const double &d, Complex &c)//定義友元函數(實數/複數)
{
	Complex c1;
	return Complex(c.real/d, c.imag);
}

Complex operator - (Complex &c)//定義一目運算符“-”函數  一目運算符只能用
{return Complex( 0 - c.real,c.imag);}

void Complex::display()
{
	cout << "(" <<real<<","<<imag<<"i)"<<endl;
}

int main()
{
	Complex c(3,4),c1;
	c1=c+5;
	cout<<"c+5=";
	c.display();
	c=c-5;
	cout<<"c-5=";
	c.display();
	c=c*5;
	cout<<"c*5=";
	c.display();
	c=c-5;
	cout<<"c/5=";
	c.display();
	c=5+c;
	cout<<"5+c=";
	c.display();
	c=5-c;
	cout<<"5-c=";
	c.display();
	c=5*c;
	cout<<"5*c=";
	c.display();
	c=5/c;
	cout<<"5/c=";
	c.display();
	c = -c;
    cout << "- c1 =" ;  
    c.display();  
	system("pause");
	return 0;
}

上機感言:通過友元函數定義,來實現運算符功能的拓展,注意在: 複數+實數定義時這樣:Complex operator + (Complex &c, const double &d) 複數在前;

                                                                                                                          實數+複數定義時這樣:Complex operator + (const double &d, Complex &c)實數在前;

上圖:

 


發佈了55 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章