究竟是什么 - > *运算符?

时间:2011-10-07 00:54:34

标签: c++ operators

我之前从未使用它,只是在一篇文章中偶然发现它......我认为它等同于*x->y,但显然不是。{/ p>

这是我尝试过的,并给了我一个错误:

struct cake {
 int * yogurt;
} * pie;

int main(void) {
 pie = new cake;
 pie->yogurt = new int;
 return pie->*yogurt = 4;
}

4 个答案:

答案 0 :(得分:4)

当你有指向成员函数的指针时使用它。

当你有一个指向类函数的指针时,你调用它的方式与调用任何成员函数的方式非常相似

object.membername(...)

objectptr-> membername(...)

但是当你有一个成员函数指针时,需要额外的*。或 - >为了让编译器理解下一步是变量,而不是要调用的函数的实际名称。

这是一个如何使用它的例子。

class Duck
{
public:

  void quack() { cout << "quack" << endl; }
  void waddle() { cout << "waddle" << endl; }
};

typedef void (Duck::*ActionPointer)();

ActionPointer myaction = &Duck::quack;

void takeDuckAction()
{    
    Duck myduck;
    Duck *myduckptr = &myduck;

    (myduck.*myaction)();
    (myduckptr->*myaction)();
}

答案 1 :(得分:3)

它定义了pointer to a member

  

在包含 - &gt; *运算符的表达式中,第一个操作数必须为   是指定类型的“指向类类型的指针”类型   第二个操作数,或者它必须是明确派生的类型   那个班。   MSDN

答案 2 :(得分:2)

答案 3 :(得分:0)

。*和 - &gt; *运算符将指向类或结构的成员函数。下面的代码将显示如何使用。*运算符的简单示例,如果更改行: Value funcPtr = &Foo::One;Value funcPtr = &Foo::Two;显示的结果将更改为1000,因为该函数为inValue*2

例如Taken From Here

#include <iostream>
#include <stdlib.h>

class Foo { 
  public: 
    double One( long inVal ) { return inVal*1; }
    double Two( long inVal ) { return inVal*2; }
}; 

typedef double (Foo::*Value)(long inVal); 

int main( int argc, char **argv ) { 
  Value funcPtr = &Foo::One; 

  Foo foo;

  double result = (foo.*funcPtr)(500); 
  std::cout << result << std::endl;
  system("pause");
  return 0; 
}