声明为友元,确还不能访问private成员?
我按照书上的写法,建立代码如下:
#include <iostream>#include <string>using namespace std;class Rational{public: Rational(int num, int deno); Rational operator+(Rational rhs); Rational operator-(Rational rhs); Rational operator*(Rational rhs); Rational operator/(Rational rhs);private: void normalize(); int numerator; int denominator; friend ostream& operator <<(ostream& os, Rational f);};Rational::Rational(int num, int deno){ numerator = num; denominator = deno; normalize();}//normalize方法实现对有理数的约分简化void Rational::normalize(){ if(denominator < 0){ numerator = -numerator; denominator = -denominator; } int a = abs(numerator); int b = abs(denominator); while(b > 0){ int t = (a%b); a = b; b = t; } numerator /= a; denominator /= a;}Rational Rational::operator +(Rational rhs){ int a = numerator; int b = denominator; int c = rhs.numerator; int d = rhs.denominator; int e = a*d + b*c; int f = b*d; return Rational(e, f);}Rational Rational::operator -(Rational rhs){ rhs.numerator = -rhs.numerator; return operator +(rhs);}Rational Rational::operator *(Rational rhs){ int a = numerator; int b = denominator; int c = rhs.numerator; int d = rhs.denominator; int e = a*c; int f = b*d; return Rational(e, f);}Rational Rational::operator /(Rational rhs){ int t = rhs.numerator; rhs.numerator = rhs.denominator; rhs.denominator = t; return operator *(rhs);}int main(){ Rational f1(88,99); Rational f2(23,78); cout << f1 << "+" << f2 << "==" << (f1+f2) << "\n"; cout << f1 << "-" << f2 << "==" << (f1-f2) << "\n"; cout << f1 << "*" << f2 << "==" << (f1*f2) << "\n"; cout << f1 << "/" << f2 << "==" << (f1/f2) << "\n"; cout << "press enter or return to continue.\n"; cin.get(); return 0;}ostream& operator <<(ostream& os, Rational f){ os << f.numerator << "/" << f.denominator; return os;}