关于类继承时各种变量的继承关系

之前一直没搞清楚,继承到底是怎么回事,这次就刚好调试一下,一下就想通了。


#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字节。



  1. 所谓不同的继承方式,只不过是A里面的可访问数据到了B里面以后,放在哪一个权限区而已;
  2. 继承只改变到A的protected和public变量的访问权限,对private变量,无权过问;
  3. B不能直接改变A的private变量,但是可以通过A提供的相关操作函数来改变,也就是说,需要经过A的同意,才能改变它的private变量。


调试时查看B的内容,是这样的结构:

d----nX

    |--Base-----pvA

                    |--pbB

即:d拥有nX和Base,Base拥有pvA和pbB。


以上,就是个人调试所得的结果,在此记录,作为备用。

你可能感兴趣的:(关于类继承时各种变量的继承关系)