• 9107阅读
  • 4回复

【提问】[c++变量空间的分配][变量名代表什么] [复制链接]

上一主题 下一主题
离线selong
 
只看楼主 倒序阅读 楼主  发表于: 2006-01-11
类的声明:

#ifndef AAAA_H
#define AAAA_H

#include <QtGui/QWidget>
#include "ui_111111111.h"

class MyClass : public QWidget
{
  Q_OBJECT

public:
  MyClass(QWidget *parent = 0);
  ~MyClass();

private:
  int a;
  Ui::MyClassClass ui;
};

#endif // AAAA_H

-------------------------------------------------------------------------------------

类的实现:
#include "111111111.h"

MyClass::MyClass(QWidget *parent)
  : QWidget(parent)
{
    ui.setupUi(this);
}

MyClass::~MyClass()
{

}


-------------------------------------------------------------------------------------

类对象的声明:
#include <QtGui/QApplication>
#include "111111111.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  MyClass w;
  w.show();
  a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
  return a.exec();
}


==========================================

问题:
1、QApplication a(argc, argv); 和 QApplication a = new QApplication(argc, argv)有区别吗?

2、MyClass w; 这种声明方式和 MyClass w = new MyClass();的区别?

3、当声明一个类的变量后,这个对象具体指什么东西?
eg:MyClass w;(有没有分配w对象的存储空间?)
w指向内存快的一块区域?

4、MyClass *PMy = new MyClass();
这样声明是不是声明一个指向类对象w的存储区域的指针(指向指针的指针?)?他和w的区别?

5、MyClass &ref = PMy;
这里的ref有时指的什么?在内存中是什么东西?

6、this->a,这里的this指什么,在内存中是什么?

7、直接 用类名MyClass来操作一些成员对象,这里的类名又是指的什么?在内存中是什么样的形态?


呵呵,一下问了这么多问题,这是我在学习C++过程中遇到的若干问题,我较为关注一个变量或对象或其他的东西,一旦声明或者分配空间之后,在内存中是一种什么样的形态,这样,我可能就会理解的更为透彻些。
还望大虾们指点。谢谢。
[ 此贴被selong在2006-01-11 20:36重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2006-01-11
以上所列的问题,都能在C++教程中找到答案。
先学C++,再学Qt


问题:
1、QApplication a(argc, argv); 和 QApplication a = new QApplication(argc, argv)有区别吗?
2、MyClass w; 这种声明方式和 MyClass w = new MyClass();的区别?
3、当声明一个类的变量后,这个对象具体指什么东西?
eg:MyClass w;(有没有分配w对象的存储空间?)
w指向内存快的一块区域?
4、MyClass *PMy = new MyClass();
这样声明是不是声明一个指向类对象w的存储区域的指针(指向指针的指针?)?他和w的区别?
5、MyClass &ref = PMy;
这里的ref有时指的什么?在内存中是什么东西?


1、QApplication a(argc, argv);
这是声明一个变量,并且调用相应的构造函数。
QApplication *a = new QApplication(argc, argv);// 注意,a是指针
这个是使用了指针的方式,不同的是,前者在a所在的作用域结束后,自动调用析构函数释放内存,而后者,在a所在的作用 域结束后,并不会自动调用析构函数和释放内存。需要显式地delete a;
2、MyClass w;和MyClass *w = new MyClass();//注意,你这里又弄错了,后者应该是个指针。
这是一样的,不同的是一个是变量,一个是指针。
3、MyClass w;
这种声明已经分配空间了,它会调用相应的构造函数来构造。
MyClass *w;
这只是声明了一个MyClass类型的指针,它不会分配空间。直到new一个。
4、PMy是指针,和w不一样。
5、MyClass &ref = PMy;
你定义了一个MyClass类型的引用,但是你使用有问题,初始化它不应该用PMy来初始化 ,而应该用w来初始化。


这些都是 C、C++中的基本知识,与Qt无关。
[ 此贴被XChinux在2006-01-11 20:35重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线selong
只看该作者 2楼 发表于: 2006-01-11
谢谢。

我会努力的。

谢谢,回答得这么快,感动呀。
离线wyq2012

只看该作者 3楼 发表于: 2006-08-21
总办就是总版,非常厉害专业,向斑竹学习
离线浪漫天使
只看该作者 4楼 发表于: 2006-08-24
推荐你看一下《c++编程思想》里面说得通俗易懂的
快速回复
限100 字节
 
上一个 下一个