当前位置: 代码迷 >> QT开发 >> 类的声明与创建有什么本质的区别?该如何解决
  详细解决方案

类的声明与创建有什么本质的区别?该如何解决

热度:99   发布时间:2016-04-25 04:50:44.0
类的声明与创建有什么本质的区别?
eg:
情形1:
ClassA A;
...
A.methodA();
===================
情形2:
ClassA *A;
...
A = new ClassA;
A->methodA();

有什么不同呢?我在网上看到一些资料,但是不知道自己说理解的对不对,还望高手请教?
情形1、全局变量的声明和创建是同步的,声明的时候会调用构造函数,即:创建了对象A
情形2、声明了一个指针对象,而指针变量只有在实例化之后,才能调用自己的方法。
但是,他们在分配内存上有什么不同呢?
是不是声明不分配内存,而创建分配内存?!

希望我抛砖引玉,能有高手详细解答。。。


------解决方案--------------------
我也不是很懂,下面是我自己的理解供参考
C/C++ code
#include<iostream>using namespace std;class A {public:    A(int n):data(n){}    void print()   {cout<<"this="<<this<<","<<"hello word!"<<endl;}    void showData(){cout<<"data="<<data<<endl;}private:    int data;};int main(int argc,char **argv){    A  a(1);  //给数据成员data分配内存,再调用构造函数A(int n)初始化    A *pa;    //分配一个普通指针的内存用于存放pa    a.print();     a.showData();    pa->print(); //因为函数成员是类共享的,所以通过pa可以访问函数成员    //若这样调用pa->showData()会报错,pa没有数据成员,其this为随机值    return 0;}//this=0012FF7C,hello word!//data=1//this=CCCCCCCC,hello word!//Press any key to continue
------解决方案--------------------
对情形2补充
C/C++ code
#include<iostream>using namespace std;class A {public:    A(int n):data(n){}    void print()   {cout<<"this="<<this<<","<<"hello word!"<<endl;}    void showData(){cout<<"data="<<data<<endl;}private:    int data;};int main(int argc,char **argv){    A  a(1),b(2);    A *pa=new A(3);  //这里我们给pa分配数据成员    a.print();     a.showData();    b.print();    b.showData();    pa->print();     pa->showData();    return 0;}//this=0012FF70,hello word!//data=1//this=0012FF6C,hello word!//data=2//this=003807A8,hello word!//data=3//Press any key to continue
  相关解决方案