【问题标题】:Using new with an object [closed]将 new 与对象一起使用 [关闭]
【发布时间】:2012-10-27 00:41:03
【问题描述】:

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

看:(Dialog是一个类)

//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

求救!

【问题讨论】:

  • 如果有的话,它会是“堆”不是“堆栈”,即便如此,我也会犹豫将这些实现细节带入事物中。是时候重读你的 C++ 书了?!
  • 是的...它与我所说的相反!

标签: c++ class object pointers


【解决方案1】:

正如其他人所说,“this”是指调用它的对象。就像:

class X {
  public:
    int y;
};

如果你写

X obj_X;

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

现在,关于 Qt :)

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

所以,你也可以这样做 对话框 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++ 书籍并阅读有关构造函数的更多信息,并在 Internet 上获取更多 Qt 教程。祝你好运!

【讨论】:

  • "对话框 mDialog(/**/);
  • 我不是在说那个,我说的是“THIS”参数与“new”运算符无关。
  • Dialog mDialog(); 不会将 anything 发送到构造函数,甚至不会调用构造函数,因为it doesn't instantiate a Dialog
【解决方案2】:

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

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

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

};

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

【讨论】:

  • 就我而言,当前对象是什么?
  • 构造函数不能return 任何东西。
  • 好点。也许我不应该以构造函数为例。感谢您注意到我的错误。
【解决方案3】:

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

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

MainWindow:: 表示被定义的函数是类MainWindow 的成员函数。在(非静态)成员函数中,关键字this 是指向该隐式参数的指针。 (另外,如果你只命名像member 这样的类成员,它真的是this-&gt;member 的缩写。)

所以在你引用的函数中,this 的类型是MainWindow* const

看起来代码将指向MainWindow 的指针传递给Dialog 构造函数。

【讨论】:

    【解决方案4】:

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

    之所以要传入Dialog的构造函数,是因为Qt的对象模型。有关这方面的更多信息,请参阅以下文档:

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

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 1970-01-01
      • 2013-03-07
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多