使用new与对象

时间:2012-10-27 00:41:04

标签: c++ class object pointers

我正在学习如何使用Qt编写程序。我的问题是关于我不太擅长的3件事:指针,对象和“new()”。

看:(对话是一个班级)

//start of code...
...

private: 
    Dialog *mDialog; //Dialog is a class 

...

void MainWindow::on_activationNew_window_triggered()
{
    mDialog = new Dialog(this); // Explain me this "this"
}

...

//end of code

解释一下这条线是如何工作的,“这个”是什么(或者是)真实的。

我所知道的是mDialog是一个窗口的类,当范围结束时,窗口关闭,所以他制作了指针并使用new,因为它将使用堆栈内存,这意味着它不会关闭范围结束时的窗口。

如果你想看他正在制作的视频部分并解释这个(也许我不够清楚)这里是视频(从8:07开始):

http://www.youtube.com/watch?v=wUH_gu2HdQE&feature=relmfu

提供任何帮助!

4 个答案:

答案 0 :(得分:2)

“this”是一个c ++概念......当在一个对象内部工作时(在你的例子中是MainWindow),这是一个指向同一个对象的指针。

所以说我在c ++中创建了一个名为Dog的类,在我的方法中,我可以将当​​前对象称为。

class Dog
{
public: 
Dog(); //default constructor
Dog(const Dog&); //copy constructor

};

Dog::Dog(const Dog& original)
{
if (&original != this)
 //do whatever;
}

答案 1 :(得分:2)

正如其他人所说,“这个”指的是被称为的对象。就像:

class X {
  public:
    int y;
};

如果你写

X obj_X;

obj_X将有一个名为“this”的变量。它将用于访问自身,并且最常用于将类对象传递给另一个方法/类/任何东西。

现在,关于Qt:)

每个Qt对象都有一个父级。这用于Qt内部工作的很多,但它就像一个对象拥有另一个。要指定父对象是什么,以及子对象是什么,请将父对象的地址发送给子对象的构造函数。

所以,你也可以这样做     Dialog mDialog(this);

这意味着事情与“新”运算符无关。让我们来看看:

Dialog mDialog(/*< constructor parameters >*/); << HERE!

“this”被发送到mDialog的构造函数,以指定它具有父级。它的父级是“this”指向的对象。你也可以这样做

Dialog mDialog(); // In which case mDialog has NO parent, because 0 parameteres went to the constructor

就这么简单:)。获取您的c ++书籍并阅读有关构造函数的更多信息,并在互联网上获得更多Qt教程。祝你好运!

答案 2 :(得分:1)

(非静态)成员函数是使用类类型的隐式参数调用的函数。在定义中

void MainWindow::on_activationNew_window_triggered()
{ //...
}

MainWindow::表示正在定义的函数是类MainWindow的成员函数。在(非静态)成员函数中,关键字this是指向该隐式参数的指针。 (另外,如果你只是命名一个像member这样的班级成员,它对于this->member来说真的很短。)

因此,在您引用的函数中,this的类型为MainWindow* const

看起来代码正在将指针传递给MainWindowDialog构造函数。

答案 3 :(得分:1)

this指的是可以在属于类(或联合或结构)的非静态成员函数中使用的指针。它指向调用成员函数的对象(在本例中为MainWindow)。

将它传递给Dialog的构造函数的原因是由于Qt的对象模型。有关详细信息,请参阅以下文档:

http://qt-project.org/doc/qt-4.8/objecttrees.html