可能重复:
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);
}
在上面的代码中,做什么 - >意思?感谢。
答案 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
的另一个对象,要么是实际的指针。