之前一直没搞清楚,继承到底是怎么回事,这次就刚好调试一下,一下就想通了。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base
{
private:
int pvA;
public:
int pbB;
void ShowPV()
{
cout << pvA << endl;
}
void SetPV(int nPv) { pvA = nPv; }
};
class Drive : public Base
{
public:
int nX;
void ShowBPV() { SetPV(20); ShowPV(); }
protected:
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
Base b;
Drive d;
d.ShowBPV(); //20
cout << sizeof(b) << endl; //8
cout << sizeof(d) << endl; //12 8+4
return 0;
}
当B继承自A的时候,B拥有了A的所有部分,同时,会加入B本身的部分。不管A的内容是private还是public,B都会持有,只不过访问的时候,会有一些区别。
比如B要访问A的private,就无法直接访问,这个与外面实例化一个对象之后是一样的。
可以看到,A的实例占8字节,B的实例占12字节,其中,继承自A的8字节,B自己本身的4字节。
- 所谓不同的继承方式,只不过是A里面的可访问数据到了B里面以后,放在哪一个权限区而已;
- 继承只改变到A的protected和public变量的访问权限,对private变量,无权过问;
- B不能直接改变A的private变量,但是可以通过A提供的相关操作函数来改变,也就是说,需要经过A的同意,才能改变它的private变量。
调试时查看B的内容,是这样的结构:
d----nX
|--Base-----pvA
|--pbB
即:d拥有nX和Base,Base拥有pvA和pbB。
以上,就是个人调试所得的结果,在此记录,作为备用。