问题描述:
#include"iostream.h"
class A
{
public:
virtual void header()
{
cout<<"这是页眉\n";
}
virtual void body()
{
cout<<"这是正文文本\n";
}
virtual void footer()
{
cout<<"这是页脚\n";
}
void diplay()
{
header();
for(int i=0;i<3;i++)
body();
footer();
}
};
class B:public A //这个类覆盖基类的两个虚函数
{
public:
void header()
{
cout<<"这是新页眉\n";
}
void footer()
{
cout<<"这是新页脚\n";
}
};
void main()
{
A *p=new A;
p->display(); //调用基类函数
delete p;
p->new B;
p->display(); //调用派生类函数
}
在main函数中,p在中间的时候就被delete了,为啥后两句还能用那个指针变量阿 ,帮忙讲解一下,谢谢!
问题解答:
A *p=new A; //从堆中申请一块区域(大小为sizeof(A),类型为Classs A),而指针p就指向这块区域
delete p; //是释放p所指向的这块区域
p->new B; //重新分配
所以,在删除p后,p还能用,是因为,p又被重新分配的地址空间
指针一但定义生成,就和别的变量一样的使用。
delete p;
只是释放内存空间而没有真正的删除指针变量的。
所以,还是可以继续使用的。