- >之间的差异和。成员选择运营商

时间:2010-06-10 23:54:10

标签: c++ class operators

  

可能重复:
  what is the difference between (.) dot operator and (->) arrow in c++

在本书中,我正在学习指针,我刚刚完成了有关OOP(在地面上吐痰)的章节,无论如何它告诉我可以使用像这样的成员选择运算符( - >)。它说这就像“。”除了指向对象而不是成员对象。什么是差异,它看起来像是以同样的方式使用......

7 个答案:

答案 0 :(得分:8)

其中:

Foo foo;
Foo* pfoo = &foo;

pfoo->mem在语义上与(*pfoo).mem完全相同。

或者换句话说:foo.mem在语义上与(&foo)->mem相同。

答案 1 :(得分:6)

是的,它实际上做了同样的事情,但对于不同类型的变量。

如果你有一个指针,你必须使用->,而如果你有一个真正的价值,你将使用.

所以例如

struct mystruct *pointer;
struct mystruct var;

pointer->field = ...
var.field = ...

这一点都不难。请记住,使用指针时,您需要->,否则需要.

答案 2 :(得分:5)

你只使用 - >当变量是对象的指针时:

A* a = new A;
a->member();

使用“。”当它不是指针时:

A a;
a.member();

答案 3 :(得分:1)

struct S
{
    int a, b;
};

S st;
S* pst = &st;
st.a = 1;    // . takes an object (or reference to one)
pst->b = 2;  // -> takes a pointer

答案 4 :(得分:1)

如果有对象实例(MyObject object;),则使用.访问它的成员(方法,属性,字段等),如下所示:object.Member

如果有指向对象实例(MyObject* pObject = new MyObject();)的指针,则需要取消引用指针,然后才能访问对象成员。要取消引用指针,请使用*运算符。因此,当你将两者结合起来时,就得到这样的结果:(*pObject).Member

当然,这是不可读的,因此编译器将->作为它的简写。因此,它变为pObject->Member

答案 5 :(得分:0)

也许这个例子会有所帮助

object o;
object *p = &o;  // pointer to object
o.member;   // access member
p->member;  // access member through pointer

答案 6 :(得分:0)

使用->取消引用指针,当您通过指针访问成员时,直接访问成员时使用.

class A
{
   public:
   int x;
   void g() {};
};

A a;
a.x
a.g();

A * ap = new A();
ap->x;
ap->g();

你可以取消引用指针,然后使用.

(*ap).x;
(*ap).g();