class A
{
public:
virtual void cgr(){cout<<"1"<<endl;}
}
class B:public A
{
public:
int b;
void cgr(){cout<<"2"<<endl;}
}
void mian()
{
A*p=new B;
}
为什么 A*p=new B 能成立虽然B是从A类继承过来的 但我在B类里增加了b;变量
这两个类就不一样了啊;
A*p=new B还有这段代码在系统中是怎么运行的?在堆区分配一个B类的内存?还是直接分配A类的内存(New B 的意思是使用哪个虚函数表?)
p是一个指针变量,指向了你所分配内存的首地址而已,p前面的A只是说明p指向的内存的大小,A * p = new B 是在堆区分配一个B类的内存,因为你的A类用virtual关键字,告诉编译器这个函数要支持多态,不是根据指针类型判断如何调用,而是要根据指针所指向的实际对象类型来判断如何调用