声明为友元,确还不能访问private成员?
我按照书上的写法,建立代码如下:
- C/C++ code
#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;}
问题:1 声明重载函数operator《《为Rational的友元,编译后还是提示无法访问private成员;
2 作为重载操作符《《的函数operator《《,若在紧挨main()之前声明,则编译后不能识别《《的重载
请大侠明示!
[解决办法]
如果你是用VC6,那么就正常了,这是一个经典BUG
http://www.cnblogs.com/xinjun/archive/2010/07/19/1780902.html
[解决办法]
[解决办法]
[解决办法]
[解决办法]