注册 登录
编程论坛 C++教室

友元函数重载运算符[]

全世界安静 发布于 2012-07-14 19:11, 470 次点击
#include <iostream>
#include <string>
using namespace std;
class Array{
int size;
int *date;
public:
    Array(int n){
        size=n;
        date=new int[n];
    }
    void set(){
        for(int i=0;i<size;i++)
            cin>>date[i];
    }
    int* getdate(){
        return date;
    }
    friend int operator[](Array a,int n);
};
int operator[](Array a,int n){
    return a.getdate()[n];
}
int main(){
  Array a(3);
  a.set();
  cout<<a[0]<<a[1]<<a[2];
  return 0;
}
error C2801: 'operator [' must be a <Unknown> member
求解
3 回复
#2
pangding2012-07-15 00:11
[] 貌似只能重载为成员函数。

请参考下面的回答:
https://bbs.bccn.net/viewthread.php?tid=371709
#3
半年换半生2012-07-21 16:04
class Array{
    int size;
    int *date;
public:
    Array(int n){
        size=n;
        date=new int[n];
    }
    void set(){
        for(int i=0;i<size;i++)
            cin>>date[i];
    }
    int getdate(int n){
        return *(date+n);
    }
    int operator[](int n);
};
int Array::operator[](int n){
    return this->getdate(n);
}

int main()

{

   
    Array a(3);
    a.set();
    cout<<a[0]<<a[1]<<a[2];

   
    system("pause");

    return 0;

}
#4
jiantiewen2012-07-21 20:39
既然[]只是用来操作class Array,就直接作为成员函数来定义就是了,弄成友元,又有什么意义。
1