2012-12-15 77 views
2

我想創建一個重載的朋友函數,將添加兩個分數。到目前爲止,我有以下解決方案,但我有第17和第19行的錯誤。我相信問題是與參數(分數amount1,分數amount2),但我不能完全把我的手指。誰能幫忙?這需要在Visual Studio中編譯2010C++超載+操作員朋友函數

#include <iostream> 

using namespace std; 

class fraction 
{ 
public: 
fraction(); //constructor for initialize 
void read(); //read 3 int from keyboard for the fraction 
void print(); //print the fraction on screen 
friend fraction operator +(fraction, fraction); //fraction add 
private: 
int integral, numerator, denominator; 
} 


int main(){ 

return 0; 
} 

fraction operator +(fraction amount1, fraction amount2) 
{ 
fraction temp; 
temp.integral = amount1.integral + amount2.integral; 
temp.numerator = amount1.numerator + amount2.numerator; 
temp.denominator = amount1.denominator + amount2.denominator; 
return temp; 
} 


void fraction::read() 
{ 
cin >> integral >> numerator >> denominator; 
} 

編輯:我已經改正了我另外的算法來

friend fraction operator +(const fraction&, const fraction&); //fraction add 

fraction operator +(const fraction& amount1, const fraction& amount2) 
{ 
fraction temp; 
temp.integral = amount1.integral + amount2.integral; 
temp.numerator = (amount1.numerator)*(amount2.denominator) + (amount2.numerator)*(amount1.denominator); 
temp.denominator = (amount1.denominator)*(amount2.denominator); 
return temp; 
} 

但是在測試這個我輸出零的分子和分母變量。有人能幫忙嗎?

+1

參見[這裏](http://stackoverflow.com/questions/4421706/operator-overloading)的簽名上如何很好的建議過載每個操作員。例如,'operator +'通常以'operator + ='的形式來實現。 – chris

+1

您可能希望您的'operator +'採用'const'引用。 –

+1

您在課堂定義後錯過';'。否則,你的代碼非常好(就「可編譯性」而言)。它可以改進很多,但除此之外沒有任何錯誤;''。 – AnT

回答

0

這編譯變化的copule後:

  • 您需要下課後添加一個分號定義和
  • 您需要定義您已聲明的構造函數,即

此構造函數

fraction(); //constructor for initialize 

應具有以內聯方式或在單獨文件中定義的正文。

此外,你應該改變你的operator

friend fraction operator +(const fraction&, const fraction&) 
+0

這裏是[ideone的鏈接](http://ideone.com/OXL95l)。 – dasblinkenlight

+0

更改操作員簽名的原因是什麼? – user1905552

+0

@ user1905552更改簽名可讓操作員在更多上下文中工作,例如,當一個或兩個操作數被聲明爲「const」時。 – dasblinkenlight

-1

你需要的,如果定義的類塊之外的運營商之前的類名稱:

fraction fraction::operator +(fraction amount1, fraction amount2); 
+2

不是我的-1,但在類定義中聲明爲朋友的函數引用*名稱空間範圍*函數。他們不是班級成員。 – AnT

+3

這是一個免費的功能,這是'class'的一個朋友,而不是一個成員。 – Johnsyweb

0
#include <iostream> 

using namespace std; 

class fraction 
{ 
public: 
//fraction(); //constructor for initialize 
void read(); //read 3 int from keyboard for the fraction 
void print(); //print the fraction on screen 
friend fraction operator +(fraction, fraction); //fraction add 
private: 
int integral, numerator, denominator; 
}; 


int main(){ 
fraction f1, f2, f3; 
cout<<"\n Enter first fraction: "; 
f1.read(); 
cout<<"\n Enter second fraction: "; 
f2.read(); 
cout<<"\n result: "; 

f3 = f1 + f2; 
f3.print(); 
return 0; 
} 

fraction operator +(fraction amount1, fraction amount2) 
{ 
fraction temp; 
temp.integral = amount1.integral + amount2.integral; 
temp.numerator = amount1.numerator + amount2.numerator; 
temp.denominator = amount1.denominator + amount2.denominator; 
return temp; 
} 


void fraction::read() 
{ 
cin >> integral >> numerator >> denominator; 
} 

void fraction::print() 
{ 
cout << integral<<" "<< numerator <<" "<< denominator <<std::endl; 
}