c++中关于new的用法

来源:百度知道 编辑:UC知道 时间:2024/04/29 01:57:26
#include <iostream.h>
class A
{
public:
virtual void show()
{
cout<<"AAA..."<<endl;
}

};
class B:public A
{
public:
void show()
{
cout<<"BBB..."<<endl;
}
};

void disp(A *a)
{
a->show();
}
void main()
{
A *pa;
B *pb;
//A *pa=new A;
//B *pb=new B;
disp(pa);
disp(pb);
delete pa;
delete pb;
}

为什么不能用 A *pa;B *pa;两句话而要用 //A *pa=new A;B *pb=new B; 这两句? 当用A *pa 和A *pa=new A时,当执行 pa->show();时, 都是正确的?

A *pa 只是声明了一个A类型的指针pa,而没有给pa分配内存,A *pa=new A;语句是给pa分配内存,即在内存中为pa分配位置。
你这个程序中,A和B类没有占用内存的语句,如果A在类中再声明一个变量,如int a;在主函数中对该变量赋值,那么如果没有用A *pa=new A;语句,那么程序就会出现问题.
另外,不同的编译器编译上面没有A *pa=new A;语句的程序有的是会报错的。

A *pa;B *pa;//pa,pb指向的内容是随机的

不用new也可以,
A aa;B bb;
A *pa==&aa;B *pa=&bb;

pa->show();等价于A::Show(*this);
pb->show();等价于B::Show(*this);(虚函数的作用)

不涉及类的成员,不会报错。