公有继承、私有继承、保护继承的测试

测试代码如下,分析见注释

#include <iostream>
using namespace std;

class Base
{
private:
	int m_private;
public:
	int m_public;
protected:
	int m_protectd;
};
class PublicChild : public Base		//在公有继承中,父类中除了私有的成员变量及成员函数,其他的成员变量均可在子类中调用
{
public:
	int testPublic()				//ok
	{
		return m_public;
	}
	int testProtect()				//ok
	{
		return m_protectd;
	}
	//int testPrivate()				//erro
	//{
	//	return m_private;
	//
};

class ProtectedChild : protected Base//在保护继承中,父类中除了私有的成员变量及成员函数,其他的成员变量均可在子类中调用
{
public:
	int testPublic()				//ok
	{
		return m_public;
	}
	int testProtected()				//ok
	{
		return m_protectd;
	}
	//int testPrivate()
	//{
	//	return m_private;
	//}
};

class PriavteChild : private Base//在私有继承中,父类中除了私有的成员变量及成员函数,其他的成员变量均可在子类中调用
{
public:
	int testPublic()				//ok
	{
		return m_public;
	}
	int testProtected()				//ok
	{
		return m_protectd;
	}
	//int testPriavte()
	//{
	//	return m_private;
	//}
};

class ProtectedPublicChild : public ProtectedChild
{
public:
	int testPublic()				//ok
	{
		return m_public;
	}
	int testProtected()				//ok
	{
		return m_protectd;
	}
	//int testPrivate()				//erro
	//{
	//	return m_private;
	//}
};

class PrivatePublicChild : public PriavteChild
{
public:
	//int testPublic()				//erro
	//{
	//	return m_public;
	//}
	//int testProtected()			//erro
	//{
	//	return m_protectd;
	//}
	//int testPrivate()				//erro
	//{
	//	return m_private;
	//}
};
int main()
{
	
	
	
	int a;

	PublicChild publicChild;		//在公有继承中,派生类的对象中的父类成员的可见性与普通类的对象中成员的可见性相同。public可见,其他的都不可见
	a = publicChild.m_public;		//ok
	//a = publicChild.m_protectd;	//erro
	//a = publicChild.m_private;	//erro

	//私有继承和保护继承的区别在于派生类的子类对祖父类成员的是否可以使用
	ProtectedChild protectedChild;		//在保护继承中,派生类的对象中的附录成员的可见性均为不可见,父类中的public,protected成员变成了protected。也就是该保护派生类的公有派生类的成员函数可以访问祖父类中的public,protected成员
	//a = protectedChild.m_public;		//erro
	//a = protectedChild.m_protectd;	//erro
	//a = protectedChild.m_private;	    //erro
	
	PriavteChild privateChild;			//在私有继承中,派生类的对象中的附录成员的可见性均为不可见,父类中的所有成员变量及函数(除了父类中的private成员),都可以理解变成了子类的private成员。所以子类的派生类成员函数无法访问祖父类中的任何成员
	//a = privateChild.m_public;		//erro
	//a = privateChild.m_protectd;		//erro
	//a = privateChild.m_private;	    //erro
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值