在C ++中,您不能重载运算符.*
有人可以举例说明运营商.*
吗?
答案 0 :(得分:8)
这是pointer to member运营商。
答案 1 :(得分:4)
答案 2 :(得分:3)
简单示例:
class Action
{
public:
void yes(std::string const& q) { std::cout << q << " YES\n"; }
void no(std::string const& q) { std::cout << q << " NO\n"; }
};
int main(int argc, char* argv[])
{
typedef void (Action::*ActionMethod)(std::string const&);
// ^^^^^^^^^^^^ The name created by the typedef
// Its a pointer to a method on `Action` that returns void
// and takes a one parameter; a string by const reference.
ActionMethod method = (argc > 2) ? &Action::yes : &Action::no;
Action action;
(action.*method)("Are there 2 or more parameters?");
// ^^^^^^ Here is the usage.
// Calling a method specified by the variable `method`
// which points at a method from Action (see the typedef above)
}
作为旁注。我很高兴你不能超载这个运算符。 : - )
答案 3 :(得分:2)
这是使用指向成员变量的指针时使用的运算符。请参阅here。
答案 4 :(得分:2)
。*取消引用类成员的指针。当您需要调用函数或访问包含在另一个类中的值时,必须引用它,并在该进程中创建一个指针,该指针也需要被删除。 。*运算符就是这样做的。