友员和重载的问题
声名了友员,为什么编译出错,提示无法访问私有数据成员
//OpOverclass.h
#include<iostream>
using namespace std;
class OpOverClass
{
friend ostream& operator<<(ostream&,const OpOverClass&);
friend istream& operator>>(istream&, OpOverClass&);
public:
void print()const;
OpOverClass operator+(const OpOverClass&)const;
OpOverClass operator*(const OpOverClass&)const;
OpOverClass(int i=0,int j=0);
private:
int a;
int b;
};
//OpOverClass.cpp
#include<iostream>
#include"OpOverClass.h"
using namespace std;
void OpOverClass::print()const
{
cout<<"("<<a<<","<<b<<")"<<endl;
}
OpOverClass OpOverClass::operator +(const OpOverClass& right)const
{
OpOverClass temp;
temp.a=a+right.a;
temp.b=b+right.b;
return temp;
}
OpOverClass OpOverClass::operator *(const OpOverClass& right)const
{
OpOverClass temp;
temp.a=a*right.a;
temp.b=b*right.b;
return temp;
}
OpOverClass::OpOverClass(int i,int j)
{
a=i;
b=j;
}
ostream& operator<<(ostream& osObject,const OpOverClass& right)
{
osObject<<"("<<right.a<<","<<right.b<<")";
return osObject;
}
istream& operator>>(istream& isObject,OpOverClass& right)
{
isObject>>right.a>>right.b;
return isObject;
}
//main.cpp
#include<iostream>
#include"OpOverClass.h"
using namespace std;
int main()
{
OpOverClass u(23,45);
OpOverClass v(12,10);
OpOverClass w;
OpOverClass w1;
OpOverClass w2;
cout<<"u= ";
u.print();
cout<<endl;
cout<<"v= ";
v.print();
cout<<endl;
w1=u+v;
cout<<"w1= ";
w1.print();
cout<<endl;
w2=u*v;
cout<<"w2= ";
w2.print();
cout<<endl;
cout<<"Enter two integers: ";
cin>>w;
cout<<w<<endl;
return 0;
}