//4.6.2   �̳з�ʽ

//�̳е��﷨:class ���� : �̳з�ʽ  ����

//�̳з�ʽһ��������:

//?�����̳�

//?�����̳�

//?˽�м̳�






#include <iostream>

class Base1
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};


class Son1 :public Base1
{
public:
	void func()
	{
		m_A = 10;      //�����еĹ���Ȩ�޳�Ա����������Ȼ�ǹ���Ȩ��
		m_A = 10;      //�����еı���Ȩ�޳�Ա����������Ȼ�DZ���Ȩ��
		//m_C = 10;      //�����е�˽��Ȩ�޳�Ա����������Ȼ��˽��Ȩ��
	}

};

void test01()
{
	Son1 s1;
	s1.m_A = 100;
	//s1.m_B = 100;      //��Son1��  m_B �DZ���Ȩ��  ������ʲ���
}

//�����̳�
class Base2
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;

};

class Son2 :protected Base2
{
public:
	void func()
	{
		m_A = 100;         //���๫���������б�ɱ���Ȩ��
		m_B = 100;         //���ౣ���������б�ɱ���Ȩ��
		//m_C = 100;       //������ʲ���
	}
};

void test02()
{
	Son2 s1;
	//s1.m_A = 1000;         //��Son2��  m_A��Ϊ����Ȩ��  ���������ʲ���
	//s1.m_B = 1000;         //��Son2��  m_A��Ϊ����Ȩ��  ���������ʲ���
}

class Base3
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;

};

class Son3 :private Base3
{
public:
	void func()
	{
		m_A = 100;        //�����й�����Ա�������Ϊ˽�г�Ա
		m_B = 100;        //�����б�����Ա�������Ϊ˽�г�Ա
		//m_C = 100;      //������˽�г�Ա��������ʲ���
	}
};

class Grandson :public Son3
{
public:
	void func()
	{
		//m_A = 1000;       //����Son3��  m_A��Ϊ˽��  ��ʹ�Ƕ���  Ҳ�Ƿ��ʲ���
		//m_B = 1000;       //����Son3��  m_B��Ϊ˽��  ��ʹ�Ƕ���  Ҳ�Ƿ��ʲ���
	}
};

void test03()
{
	Son3 s1;
	//s1.m_A = 1000;       //��Ϊ˽�г�Ա  ������ʲ���
	//s1.m_C = 1000;       //��Ϊ˽�г�Ա  ������ʲ���
}

int main()
{



	system("pause");

	return 0;
}