2012C++程序設計實驗報告【8.1】

/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱:        運算符的重載                
* 作    者:      王琳                      
* 完成日期:    2012     年 4    月   9日
* 版 本 號:    8-1

* 對任務及求解方法的描述部分
* 問題描述:用類的成員函數完成運算符的重載

* 程序頭部的註釋結束
*/

源程序:

#include<iostream> 

using namespace std;

class Complex    
{    
public:    
	Complex(){real=0;imag=0;}    
	Complex(double r,double i){real=r;imag=i;}    
    Complex operator+(Complex &c2);    
	Complex operator-(Complex &c2);    
	Complex operator*(Complex &c2);    
	Complex operator/(Complex &c2);    
    void display();    
private:    
	double real;    
	double imag;    
};    
//下面定義成員函數    
Complex Complex::operator+(Complex &c2)    
{    
	return Complex((real+c2.real),(imag+c2.imag));    
}

Complex Complex::operator-(Complex &c2)     
{     
	return Complex((real-c2.real),(imag-c2.imag));    
} 

Complex Complex::operator*(Complex &c2)    
{    
	return Complex((real*c2.real - imag*c2.imag),(real*c2.imag + imag*c2.real));    
} 

Complex Complex::operator/(Complex &c2)    
{    
	return Complex((real*c2.real + imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(-real*c2.imag + imag*c2.real)/(c2.real*c2.real+c2.imag*c2.imag));    
}    
void Complex::display()    

{ 
	cout<<"("<<real<<","<<imag<<"i)"<<endl;    
}    

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

源程序二 用類的友元函數,而不是成員函數,完成上面提及的運算符的重載

#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 &c1,Complex &c2);    
	friend Complex operator-(Complex &c1,Complex &c2);    
	friend Complex operator*(Complex &c1,Complex &c2);    
	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));    
}

Complex operator-(Complex &c1,Complex &c2)     
{     
	return Complex((c1.real-c2.real),(c1.imag-c2.imag));    
} 

Complex operator*(Complex &c1,Complex &c2)    
{    
	return Complex((c1.real*c2.real - c1.imag*c2.imag),(c1.real*c2.imag + c1.imag*c2.real));    
} 

Complex operator/(Complex &c1,Complex &c2)    
{    
	return Complex((c1.real*c2.real + c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(-c1.real*c2.imag + c1.imag*c2.real)/(c2.real*c2.real+c2.imag*c2.imag));    
}    
void Complex::display()    

{ 
	cout<<"("<<real<<","<<imag<<"i)"<<endl;    
}    

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


 

運行結果:

感想:條條大道通羅馬!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章