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;
}