當前位置:
首頁 > 知識 > 分數類,實現加減乘除操作符的重載(未考慮約數)

分數類,實現加減乘除操作符的重載(未考慮約數)

  1. #include <stdlib.h>
  2. #include <iostream>
  3. using namespace std;
  4. class Fraction
  5. {
  6. public:
  7. Fraction(){}
  8. Fraction(int num, int deno): numerator(num), denominator(deno){}
  9. Fraction(const Fraction &copy)
  10. {
  11. this->numerator = copy.numerator;
  12. this->denominator = copy.denominator;
  13. }
  14. Fraction& operator=(const Fraction &copy)
  15. {
  16. if (this == &copy)
  17. {
  18. return *this;
  19. }
  20. this->numerator = copy.numerator;
  21. this->denominator = copy.denominator;
  22. return *this;
  23. }
  24. ~Fraction(){}
  25. friend ostream& operator<<(ostream &os, const Fraction &a)
  26. {
  27. os << a.numerator << "/" << a.denominator << endl;
  28. return os;
  29. }
  30. friend istream& operator>>(istream &in, Fraction &a)
  31. {
  32. in >> a.numerator >> a.denominator;
  33. return in;
  34. }
  35. Fraction operator+(const Fraction &a)
  36. {
  37. Fraction tmp(this->numerator * a.denominator + a.numerator * this->denominator, this->denominator * a.denominator);
  38. return tmp;
  39. }
  40. Fraction operator-(const Fraction &a)
  41. {
  42. Fraction tmp(this->numerator * a.denominator - a.numerator * this->denominator, this->denominator * a.denominator);
  43. return tmp;
  44. }
  45. Fraction operator*(const Fraction &a)
  46. {
  47. Fraction tmp(this->numerator * a.numerator, this->denominator * a.denominator);
  48. return tmp;
  49. }
  50. Fraction operator/(const Fraction &a)
  51. {
  52. Fraction tmp(this->numerator * a.denominator, this->denominator * a.numerator);
  53. return tmp;
  54. }
  55. private:
  56. int numerator;
  57. int denominator;
  58. };
  59. int main()
  60. {
  61. Fraction a(5, 31);
  62. Fraction b(3, 10);
  63. Fraction c(a - b);
  64. cout << c << endl;
  65. return 0;
  66. }

期間遇到如下錯誤

  1. [test@ls test]$ g++ -g test.cpp -o test
  2. test.cpp: In function 『std::istream& operator>>(const istream&, Fraction&)』:
  3. test.cpp:39:17: error: passing 『const istream {aka const std::basic_istream<char>}』 as 『this』 argument of 『std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]』 discards qualifiers [-fpermissive]
  4. in >> a.numerator >> a.denominator;
  5. ^
  6. test.cpp:40:16: error: invalid initialization of reference of type 『std::istream& {aka std::basic_istream<char>&}』 from expression of type 『const istream {aka const std::basic_istream<char>}』
  7. return in;
  8. ^

原因為輸入操作符重載時,參數添加了const關鍵字。由於要對輸入流進行修改,const操作符不應存在

  1. friend istream& operator>>(const istream &in, Fraction &a)
  2. {
  3. in >> a.numerator >> a.denominator;
  4. return in;
  5. }

分數類,實現加減乘除操作符的重載(未考慮約數)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

windows下php7.0安裝redis擴展包
即時通訊瑣碎知識點

TAG:程序員小新人學習 |