【发布时间】:2010-12-19 06:40:01
【问题描述】:
C++ 继续让我感到惊讶。 今天我发现了 ->* 运算符。它是可重载的,但我不知道如何调用它。我设法在课堂上重载它,但我不知道如何调用它。
struct B { int a; };
struct A
{
typedef int (A::*a_func)(void);
B *p;
int a,b,c;
A() { a=0; }
A(int bb) { b=b; c=b; }
int operator + (int a) { return 2; }
int operator ->* (a_func a) { return 99; }
int operator ->* (int a) { return 94; }
int operator * (int a) { return 2; }
B* operator -> () { return p; }
int ff() { return 4; }
};
void main()
{
A a;
A*p = &a;
a + 2;
}
编辑:
感谢回答。调用我写的重载函数
void main()
{
A a;
A*p = &a;
a + 2;
a->a;
A::a_func f = &A::ff;
(&a->*f)();
(a->*f); //this
}
【问题讨论】:
-
不,在这种情况下您不调用重载运算符。你所说的是内置的。您的重载运算符需要
int作为第二个参数。 -
@AndreyT:更新结构以反映新的 main。
-
@acidzombie24:好的,现在你终于调用了重载版本。同样,您可以通过
a->*42执行此操作而无需任何更新,正如 sellibitze 建议的那样。
标签: c++ operator-overloading operator-arrow-star