为什么我的友元函数不能享有与成元函数同等的待遇?——百思不得其解

mituzhishi 2004-03-07 04:16:01
程序较长,但需要大家看的只有友元函数那一小段。我的友元函数不能访问私有成员,令我万分疑惑,望高手指点一二。
#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;
}
...全文
37 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧