读书人

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

发布时间: 2012-05-05 17:21:10 作者: rapoo

类的声明与创建有什么本质的区别?
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 

读书人网 >QT开发

热点推荐