zoukankan      html  css  js  c++  java
  • protected、public、private

    一、protected成员

    1. 受保护的成员的可访问性

    • 对于一个类的protected成员,①该类的用户(如类对象)不能访问它,②该类的派生类的成员(及其友元)可以访问它。
    • 派生类的成员及其友元不能访问其基类对象的受保护成员,它们只能访问继承到派生类对象中的受保护成员
    • 派生类的成员及其友元只能访问派生类对象中的基类部分的protected成员,不能访问普通的基类对象中的protected成员

    借助下面的例子加深理解:

    class Base {
    protected:
    	int proc = 0;
    };
    
    class Derv : public Base {
    	void set_base_false()
    	{ 
    		Base b;
    		b.proc = 1; 		//[Error] 'int Base::proc' is protected
    	}
    	void set_base_true()
    	{
    		Derv d;
    		d.proc = 1;
    	}
    	void set_base_true2()
    	{
    		proc = 1;			//访问该派生类继承而来的proc成员 
    	}
    };

     

    二、三种继承方式

    1. 派生访问说明符

    对于派生类的成员及友元能否访问其直接基类的成员没什么影响

    目的:控制派生类用户(包括派生类的派生类在内)对于基类成员的访问权限

    2. 继承方式不影响派生类的成员及其友元访问基类的成员

    class Base {
    public:
    	void pub_mem();
    protected:
    	int prot_mem;
    private:
    	int priv_mem;
    };
    
    //公有继承 
    class Pub_derv : public Base {
    	int f1() { pub_mem(); }
    	int f2() { return prot_mem; }
    	int f3() { return priv_mem; }		//错误:派生类不可访问private成员
    };
    
    //私有继承 
    class Priv_derv : private Base {
    	int f1() { pub_mem(); }
    	int f2() { return prot_mem; }
    	int f3() { return priv_mem; }		//错误:派生类不可访问private成员
    };
    

    3. 继承方式影响派生类对象及其派生类访问基类的成员

    公有继承:派生类中(从基类中)继承而来的成员都遵循其原有的访问说明符

    私有继承:派生类中(从基类中)继承而来的成员的访问说明符都是private

    保护继承:派生类中(从基类中)继承而来的成员,若其在基类中的访问说明符是public,则在派生类中的访问说明符变为protected

    	Pub_derv d1;		//公有继承而来的派生类对象d1 
    	Priv_derv d2;		//私有继承而来的派生类对象d2 
    	d1.pub_mem(); 		//正确:pub_mem()在派生类中是public的 
    	cout << d1.prot_mem << endl; 	//错误:prot_mem在派生类中是protected的,但类的对象无法访问protected成员
    	d2.pub_mem(); 		//错误:pub_mem()在派生类中是private的 
    

    补充:其实题目中所说的基类的成员是指继承到派生类中的基类的成员(即,派生类的成员的基类部分

     

    三、派生类向基类转换的可访问性

    0. 影响因素

    使用该转换的代码

    派生类的派生访问说明符

    1. D继承自B

    • D公有地继承B时,用户代码才能使用派生类向基类的转换(用户代码可访问B的公有成员)
    • 如果B是D的直接基类,则D的成员和友元可以使用派生类向基类的转换(D的成员和友元可访问B的公有成员)
    • D不是私有地继承B时,则D的派生类的成员和友元可以使用D向B的类型转换(D的派生类的成员和友元可访问B的公有成员)

    小结:对于代码中的某个给定节点来说,如果基类的公有成员是可访问的,则派生类向基类的类型转换也是可访问的。

     

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/xzxl/p/7779194.html
Copyright © 2011-2022 走看看