对象切割会带来什么?
请看下面的测试代码
#include <iostream>
#include <stdlib.h>
using namespace std;
class CA
{
public:
int m;
CA(int r=0){m=r;printf("%d CA::CA()\n",m);}
~CA(){printf("%d CA::~CA()\n",m);}
void f(){printf("%d CA::f()\n",m);}
};
class CB : public CA
{
public:
CA mcal;
CB():mcal(2){printf("CB::CB()\n");}
~CB(){printf("CB::~CB()\n");}
void f(){printf("%d CB::f()\n",m);}
};
int main(int argc, char *argv[])
{
CA *pl = new CB;
pl->f();
delete pl;
system("PAUSE");
return 0;
}
这样得出的结果是
0 CA::CA()
2 CA::CA()
CB::CB()
0 CA::f()
0 CA::~CA()
此处,pl在CB的object中发生了切割,我的问题是:
1:在CB的object中,内存布局是怎样的?
2:为什么非静态成员变量m的值是0?