zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    libubox组件(1)——usock
    linux 块设备驱动(五)——块设备应用层的操作
    linux 块设备驱动(四)——简单的sbull实例
    linux 块设备驱动 (三)块设备驱动开发
    linux 块设备驱动(二)——块设备数据结构
    CUDA:零拷贝主机内存
    《无法触碰》
    CUDA: 流
    CUDA: 原子操作
    CUDA:纹理内存
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860136.html
Copyright © 2011-2022 走看看