什么是a之间的区别。和 - >在C ++中调用Method

时间:2011-03-16 16:35:30

标签: c++ methods

你能告诉我a之间的区别吗?和 - >调用C ++中的方法。

此代码使用两种调用方法都可以正常工作。

#include <iostream>

using namespace std;

class myclass
{
    public:
    string doSomething();
};


string myclass::doSomething()
{
    return "done something\n";
}

int main (int argc, const char * argv[])
{
    myclass c;
    std::cout << c.doSomething();

    myclass *c2;    
    std::cout << c2->doSomething();

    return 0;
}

我不明白这两个电话之间有什么不同?他们都工作?

4 个答案:

答案 0 :(得分:10)

箭头操作符用于从指向对象实例的指针调用方法。

点运算符用于从引用到对象实例或在本地定义的对象上调用方法。

如果您在两个示例中颠倒了运算符,则代码将无法编译。

答案 1 :(得分:10)

c2->doSomething();

相当于:

(*c2).doSomething();

即。在调用方法之前,指针被取消引用。

查看Alf Steinbach的pointer tutorial获取更多帮助。

答案 2 :(得分:6)

  

myclass *c2;
      std::cout << c2->doSomething();

这是未定义的行为。 c2未初始化。

你需要写

myclass *c2 = &c;
c2->doSomething();

c2->doSomething()在语义上等同于(*c2).doSomething(),后者与c.doSomething()相同

修改

查看Alf Steinbach的pointer tutorial

答案 3 :(得分:0)

不,如发布,它将无效,因为您没有初始化指针 c2。

至于语法:请参阅任何关于C ++的入门书,它将解释这一点。

简短的版本是,箭头操作符->(*c2).doSomething();的快捷方式