当一个对象指针调用[]时,它调用的是指针本身的[],就像调用数组本身的[],而不是调用你重载的operator[]函数,这个时候应该用*解引用此对象指针得到对象本身。例如:
class Test
{public:
explicit Test(int c)
{
c_ = c;
}
void show()
{
cout << c_ << endl;
}
private:
int c_;
};
class TestCollection
{public:
Test& operator[](int i)
{
return *va[i];
}
TestCollection()
{ }
void doit()
{
va.push_back(new Test(1));
va.push_back(new Test(2));
}
void clear()
{
for(unsigned int i = 0; i < va.size(); i++)
{
delete va[i];
}
}
private:
vector<Test*> va;
};
int main(int argc, char* argv[])
{
TestCollection* ta = new TestCollection();
ta->doit(); //ta[i].show(); //出错,调用指针的[]
(*ta)[0].show();//成功 ta->clear();
delete ta;
getchar();
return 0;
}