直接上代码
#include <iostream>
using namespace std;
class A
{
public:
void funcA()
{
cout << "funcA()" << endl;
}
};
class B
{
protected:
A* p;
public:
B(A* pa): p(pa){}
void funcB()
{
cout << "funcB()" << endl;
}
A* operator ->()
{
return p;
}
};
void main()
{
A a;
B b(&a);
b->funcA();//其实很简单,重载后,b->funcA();被解释为(b.operator->())->funcA(),即(&a)->funcA;
}
不过注意一下,->运算符和(),[]等几个运算符一样(好吧太久没写C++,忘了剩下的几个了),只能重载为成员函数,而不能是友元
至于为什么只能重载为成员,读者可以去查阅一下其他资料,我确实有点记不清了,大多数是处于一些逻辑上的考虑吧