在c ++中是做什么的 - >意思?

时间:2011-11-14 18:02:42

标签: c++ qt

  

可能重复:
  When do I use a dot, arrow, or double colon to refer to members of a class in C++?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

在上面的代码中,做什么 - >意思?感谢。

6 个答案:

答案 0 :(得分:7)

这意味着箭头左侧的对象是指向类或结构实例的指针,右侧的名称是该类或结构的成员。

在上下文中:

ui->setupUI(this);

这意味着ui是指向类Ui::MainWindow的实例的指针,setupUI(this)是使用参数调用该类的setupUI成员函数this

如果您有一个类(或结构)的实际实例而不是指针,那么您使用符号:

Ui::MainWindow non_ptr; // not a pointer
non_ptr.setupUI(this);

严格来说,你也可以写:

(*ui).setupUI(this);

但是,如果你编写这样的代码而不是使用->箭头操作符,你将被正确排斥。

答案 1 :(得分:2)

在大多数情况下,x->y(*x).y相同。像迭代器这样的东西可以重载->来做一些奖励,但总的来说它是一个简写。

答案 2 :(得分:2)

ui->等同于(*ui).(访问ui指向的对象的成员)。

答案 3 :(得分:2)

ui->setupUi(this)实际上是编写(*ui).setupUi(this)的简短方法。

P.S。:有人对你的问题进行了投票,所以我对它进行了投票。对于downvoter:加油!那么如果这是一个微不足道的问题呢?对于刚刚开始学习C ++的人来说,这可能是一个非常合理的方法。

答案 4 :(得分:1)

C和C ++中的符号表示我们通过指针访问变量

答案 5 :(得分:1)

假设ui是指针类型(正如用new UI::MainWindow初始化所暗示的那样),则ui->setupUi相当于*(ui).setUi

但是,也可以为一个类重载operator->,在这种情况下,它基本上等同于ui.operator->(whatever)。值得注意的是,重载operator->的语义有点不寻常:x->被解释为(x.operator->())->y,因此重载的operator->必须返回某些类型{{1}也是合法的 - 要么重载returned_object->y的另一个对象,要么是实际的指针。