C++共有型派生(public)和私有型派生的区别(private)

子类公有派生基类后可以访问基类中的公有成员(变量和方法),不能访问私有成员。
使用子类创建对象后,该对象可以访问基类的公有成员(可在类体外访问)。
子类私有派生基类后可以访问基类中的公有成员、保护成员(变量和方法),不能访问私有成员。
使用子类创建对象后,该对象不能访问基类的公有成员(不能在类体外访问)。

例子

共有继承
#include<iostream>
using namespace std;
class CEmployee
{
private:
	int m_ye;
public:
	int m_ID;
	char m_Name[128];
	char m_Depart[128];
	CEmployee()
	{
		memset(m_Name,0,128);
		memset(m_Depart,0,128);
	}
void OutputName()
{
	cout<<"员工姓名:"<<m_Name<<endl;
}
};

class COperator:public CEmployee
{
public:
	char m_Password[128];
	bool Login()
	{
		if(strcmp(m_Name,"MR")==0 &&
		strcmp(m_Password,"KJ")==0)
		{
			cout<<"登录成功"<<endl;
			return true; 
		}
		else
		{
			cout<<"登陆失败"<<endl;
			return false;	
		}
	}
};
int main(int argc, char *arg[])
{
	COperator optr;
	strcpy(optr.m_Name,"MR");		//公有继承可以访问基类公有成员
	strcpy(optr.m_Password,"KJ");	//公有继承可以访问基类公有成员
	optr.Login();
	optr.OutputName();				//公有继承可以访问基类公有成员
	return 0;
}
共有继承
共有继承
#include<iostream>
using namespace std;
class CEmployee
{
private:
	int m_ye;
public:
	int m_ID;
	char m_Name[128];
	char m_Depart[128];
	CEmployee()
	{
		memset(m_Name,0,128);
		memset(m_Depart,0,128);
	}
void OutputName()
{
	cout<<"员工姓名:"<<m_Name<<endl;
}
};

class COperator:private CEmployee
{
public:
	char m_Password[128];
	bool Login()
	{
		if(strcmp(m_Name,"MR")==0 &&
		strcmp(m_Password,"KJ")==0)
		{
			cout<<"登录成功"<<endl;
			return true; 
		}
		else
		{
			cout<<"登陆失败"<<endl;
			return false;	
		}
	}
};
int main(int argc, char *arg[])
{
	COperator optr;
	strcpy(optr.m_Name,"MR");		//出错
	strcpy(optr.m_Password,"KJ");	//出错
	optr.Login();
	optr.OutputName();				//出错
	return 0;
}
posted @ 2019-09-18 20:53  消灭猕猴桃  阅读(271)  评论(0编辑  收藏  举报