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