C ++ - 什么是运算符。*?

时间:2011-05-12 14:32:11

标签: c++

在C ++中,您不能重载运算符.*

有人可以举例说明运营商.*吗?

5 个答案:

答案 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)

。*取消引用类成员的指针。当您需要调用函数或访问包含在另一个类中的值时,必须引用它,并在该进程中创建一个指针,该指针也需要被删除。 。*运算符就是这样做的。