为什么我的友元函数不能享有与成元函数同等的待遇?——百思不得其解
程序较长,但需要大家看的只有友元函数那一小段。我的友元函数不能访问私有成员,令我万分疑惑,望高手指点一二。
#include<iostream>
using namespace std;
class Array
{
int *a;//指向数组
int n;//数组元素个数
public:
Array(){a=NULL; n=0;}//默认构造函数
Array(int aa[], int len);//构造函数
Array(Array &x);// 拷贝构造函数
Array &operator=(Array &x);//重载运算符
int &operator[](int i); //重载运算符
friend ostream &operator<<(ostream &ostr,Array &ar);//友元函数
};
Array::Array(int aa[], int len):a(new int[len]),n(len)
{
for(int i=0; i<n; i++)
a[i]=aa[i];
}
Array::Array(Array &x):n(x.n),a(new int[n])//引用已有的对象x对新生成的对象进行初始化
{
for(int i=0; i<n; i++)
a[i]=x.a[i];
}
Array &Array::operator=(Array &x)
{
delete []a;
n=x.n;
a=new int[n];
for(int i=0; i<n; i++)
a[i]=x.a[i];
return *this;
}
int &Array::operator[](int i)
{
if(i<0||i>n){
cout<<endl<<"下标越界!";
exit(2);
}
return a[i];
}
ostream &operator<<(ostream &ostr,Array &ar)//友元函数的定义
{
for(int i=0; i<ar.n; i++)
ostr<<ar[i]<<' ';
return ostr;
}
void main()
{
int d[]={6,7,8,9,10};
Array x(d,5);
Array *pa=new Array(d,5);
cout<<x
<<endl<<*pa
<<endl<<Array(d,5)<<endl;
delete pa;
}