分數類,實現加減乘除操作符的重載(未考慮約數)
知識
08-02
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- class Fraction
- {
- public:
- Fraction(){}
- Fraction(int num, int deno): numerator(num), denominator(deno){}
- Fraction(const Fraction ©)
- {
- this->numerator = copy.numerator;
- this->denominator = copy.denominator;
- }
- Fraction& operator=(const Fraction ©)
- {
- if (this == ©)
- {
- return *this;
- }
- this->numerator = copy.numerator;
- this->denominator = copy.denominator;
- return *this;
- }
- ~Fraction(){}
- friend ostream& operator<<(ostream &os, const Fraction &a)
- {
- os << a.numerator << "/" << a.denominator << endl;
- return os;
- }
- friend istream& operator>>(istream &in, Fraction &a)
- {
- in >> a.numerator >> a.denominator;
- return in;
- }
- Fraction operator+(const Fraction &a)
- {
- Fraction tmp(this->numerator * a.denominator + a.numerator * this->denominator, this->denominator * a.denominator);
- return tmp;
- }
- Fraction operator-(const Fraction &a)
- {
- Fraction tmp(this->numerator * a.denominator - a.numerator * this->denominator, this->denominator * a.denominator);
- return tmp;
- }
- Fraction operator*(const Fraction &a)
- {
- Fraction tmp(this->numerator * a.numerator, this->denominator * a.denominator);
- return tmp;
- }
- Fraction operator/(const Fraction &a)
- {
- Fraction tmp(this->numerator * a.denominator, this->denominator * a.numerator);
- return tmp;
- }
- private:
- int numerator;
- int denominator;
- };
- int main()
- {
- Fraction a(5, 31);
- Fraction b(3, 10);
- Fraction c(a - b);
- cout << c << endl;
- return 0;
- }
期間遇到如下錯誤
- [test@ls test]$ g++ -g test.cpp -o test
- test.cpp: In function 『std::istream& operator>>(const istream&, Fraction&)』:
- 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]
- in >> a.numerator >> a.denominator;
- ^
- 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>}』
- return in;
- ^
原因為輸入操作符重載時,參數添加了const關鍵字。由於要對輸入流進行修改,const操作符不應存在
- friend istream& operator>>(const istream &in, Fraction &a)
- {
- in >> a.numerator >> a.denominator;
- return in;
- }
※windows下php7.0安裝redis擴展包
※即時通訊瑣碎知識點
TAG:程序員小新人學習 |