运算符重载>>和私人成员

时间:2013-07-10 15:06:19

标签: c++ operator-overloading cin private-members friend-function

请在标记为重复之前阅读

我正在重载运算符>>和<<用于读取具有实部r和虚部i的复数;

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class complex
{
    int r,i;
public:
complex()
{ i=r=0;}
friend istream& operator>>(istream&, complex&);
friend ostream& operator<<(ostream&,complex&);
};
istream& operator>>(ifstream &din, complex &x)
{
    din>>x.r;
    din>>x.i;
    return din;
}
ostream& operator<<(ostream &dout, complex &x)
{
dout<<x.r<<x.i;
return dout;
}
void main()
{
clrscr();
complex x;
cin>>x;
cout<<x;

}

错误是r和i无法访问 在代码部分

din>>x.r; din>>x.i;

错误是r和i是私有的,因此无法访问 不是普通的朋友功能能够访问私有变量。为什么&gt;&gt;失败?仅?

注意:&lt;&lt;运算符工作正常。只有&gt;&gt;失败

1 个答案:

答案 0 :(得分:6)

operator>>的友元声明采用istream参数,但实现采用ifstream参数,使其完全不同(因而非friend)函数。删除额外的f,它应该有效。

相关问题