我正在经历这个特殊的重载示例 - > *运算符。我努力克服为什么我们需要使用overload()运算符但是在经过大量的googling和reerence之后无法得到它.Eckel说当调用operator - > *时,编译器会立即转身并调用operator( )对于运算符的返回值 - > *。现在我知道我们想要的这个 - > *运算符就像一个类的智能指针一样,它应该能像正常指针一样引用成员函数。所以我们这样做(w-> * pmf)(1),在这里我认为 - > *需要知道int中的int的返回值,这就是为什么它在 - >之上被重载的原因; *运营商。在嵌套迭代器的情况下我有另一个疑问,为什么我们需要声明嵌套类,然后在重载 - >时将它声明为朋友。使它像嵌套迭代器?我是C ++的初学者,这就是为什么这些问题可能看起来太天真了,有些抱歉,但是我想深入了解这些东西,因为我一直在为重载而苦苦挣扎 - >和 - > *到现在为止。
#include <iostream>
using namespace std;
class Dog {
public:
int run(int i) const {
cout << "run\n";
return i;
}
int eat(int i) const {
cout << "eat\n";
return i;
}
int sleep(int i) const {
cout << "ZZZ\n";
return i;
}
typedef int (Dog::*PMF)(int) const;
// operator->* must return an object
// that has an operator():
class FunctionObject {
Dog* ptr;
PMF pmem;
public:
// Save the object pointer and member pointer
FunctionObject(Dog* wp, PMF pmf): ptr(wp), pmem(pmf) {
cout << "FunctionObject constructor\n";
}
// Make the call using the object pointer
// and member pointer
int operator()(int i) const {
cout << "FunctionObject::operator()\n";
return (ptr->*pmem)(i); // Make the call
}
};
FunctionObject operator->*(PMF pmf) {
cout << "operator->*" << endl;
return FunctionObject(this, pmf);
}
};
int main() {
Dog w;
Dog::PMF pmf = &Dog::run;
cout << (w->*pmf)(1) << endl;
pmf = &Dog::sleep;
cout << (w->*pmf)(2) << endl;
pmf = &Dog::eat;
cout << (w->*pmf)(3) << endl;
}