精华内容
下载资源
问答
  • C++中常见的3种继承方式:public 继承protected 继承和private继承public 当采用公有继承时,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员课件,其他成员不可见。基类成员对派生类的可见性对...

    C++中常见的3种继承方式:public 继承、protected 继承和private继承


    public
    当采用公有继承时,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员课件,其他成员不可见。

    基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见;基类的公有成员和保护成员作为派生类的成员时,它们都维持原有的状态;基类的私有成员不可见;基类的私有成员依然是私有的,派生类不可访问和保护成员。


    protected

    保护继承与私有继承方式的情况相同。两者的区别在于对派生类的成员而言,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。

    基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派生类的保护成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的;派生类不可访问基类中的私有成员。

    基类对象对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再往下继承。



    private

    在私有继承中,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。

    基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员时可见的:基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的;派生类不可访问基类中的私有成员。基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承
    这里写图片描述
    这里写图片描述

    展开全文
  • 1 三种继承方式    (1) 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。  (2) 私有...


    1 三种继承方式 

     
    (1) 公有继承(public)   
    公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。  

    (2) 私有继承(private)  ------------------默认的继承方式(如果缺省,默认为private继承)

    私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。 

    子类也不能转换成相应的基类,如果转换,会报错:“不允许对不可访问的基类进行转换”。

    (3) 保护继承(protected)   
    保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。

    下面列出三种不同的继承方式的基类特性和派生类特性。 

     

      public protected private
    公有继承 public protected 不可见
    私有继承 private private 不可见
    保护继承 protected protected 不可见

     

    为了进一步理解三种不同的继承方式在其成员的可见性方面的区别,下面从三种不同角度进行讨论。

     


    1.1 对于公有继承方式


    (1) 基类成员对其对象的可见性:  
    公有成员可见,其他不可见。这里保护成员同于私有成员。
       
    (2) 基类成员对派生类的可见性:  
    公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。
       
    (3) 基类成员对派生类对象的可见性:  
    公有成员可见,其他成员不可见。  

    所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。

     

    1.2 对于私有继承方式


    (1) 基类成员对其对象的可见性:  
    公有成员可见,其他成员不可见。  
    (2) 基类成员对派生类的可见性:  
    公有成员和保护成员是可见的,而私有成员是不可见的。  
    (3) 基类成员对派生类对象的可见性:  
    所有成员都是不可见的。  
    所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

     

    1.3 对于保护继承方式

    这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。

    上述所说的可见性也就是可访问性。关于可访问性还有另的一种说法。这种规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。

    一般规则
    公有继承时,水平访问和垂直访问对基类中的公有成员不受限制;  
    私有继承时,水平访问和垂直访问对基类中的公有成员也不能访问;  
    保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。  
    对于基类中的私有成员,只能被基类中的成员函数和友元函数所访问,不能被其他的函数访问。  

    基类与派生类的关系:任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。

     

     

     

    2 基类与派生类之间的关系

     

    2.1 派生类是基类的具体化

    类的层次通常反映了客观世界中某种真实的模型。在这种情况下,不难看出:基类是对若干个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型。

     

    2.2 派生类是基类定义的延续

    先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。例如,虚函数就属此类情况。这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用方法。

     

    2.3 派生类是基类的组合

    在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。  派生类将其本身与基类区别开来的方法是添加数据成员和成员函数。因此,继承的机制将使得在创建新类时,只需说明新类与已有类的区别,从而大量原有的程序代码都可以复用,所以有人称类是“可复用的软件构件”。

     

    3 注意

    (1) 子类对父类成员的访问权限跟如何继承没有任何关系,“子类可以访问父类的public和protected成员,不可以访问父类的private成员”——这句话对任何一种继承都是成立的。

    (2) 继承修饰符影响着谁可以知道“继承”这件事。public继承大家都知道,有点像“法定继承人”,因此,任何代码都可以把子类的引用(或指针)直接转换为父类。也因为这个原因,public继承常用来表达设计中所谓的“is-a”关系。private继承则有点像“私生子”,除了子类自己,没有人知道这层关系,也因此,除了子类自己的代码之外,没有其它人知道自己还有个父亲,于是也就没有其它人可以做相应的类型转换。为此,私有继承常用于表达非“is-a”的关系,这种情况下子类只是借用父类的某些实现细节。protected继承则有点特殊,外界同样不知道这层关系,但家族内部的子孙们可以知道,有点像“自家知道就行了,不许外扬”的意思,于是子孙们是可以做这种向上转型,其它代码则不可以。因为这种特殊性,protected继承在实际中用得很少。

    (3) 还需要补充一点,由于“继承关系”的可见性受到了影响,那么继承来的财产的可见性也必然受到影响。比如一个成员变量或成员函数,在父类中本来是public的,被某个子类protected继承之后,对子类来讲,这个成员就相当于protected成员了——继承是继承到了,但权限变了。具体的规则教材上都会讲的。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    本文转自:

    https://blog.csdn.net/eric_4300741/article/details/52851590

     

     

     

     

     

     

     

     

     

    展开全文
  • public公有继承 protected保护继承 private私有继承  我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.  公有继承时,基类的private成员派生类也不可用,基类的public...
    public公有继承 protected保护继承 private私有继承 
    我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 
    公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用.
     保护继承时,基类的private成员仍为有私有.基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员 
    私有继承时,基类的private成员仍为有私有.基类的public和protected成员将变成派生类的private成员.
    展开全文
  • c++继承protected

    2017-09-07 20:17:43
    c++继承protected

    继承是面向对象重要的特性,也较为复杂。继承主要的问题是:派生类对基类成员的访问权限。

    private和public相信“众所周知”,public成员可以被类的对象、派生类成员访问,而private仅允许本类的成员函数访问。

    本文主要解释protected:protected成员和protected继承。

    protected成员:希望与派生类共享但拒绝外界直接访问的成员。

    protected成员可以看作是public和private的中和体:

    1. 具有private成员的一部分性质:不允许直接通过类的对象访问。

    2. 具有public成员的一部分性质:派生类可以直接访问基类的protected成员。

    当然当这两条性质是protected的最基本性质,但还存在另一条很重要的性质:

    3. 派生类成员或友元不能访问基类对象的受保护成员,但可以访问派生类对象的受保护成员(当然公有成员也可以访问),且与继承方式无关。

    注意这里强调用对象访问!

    举个栗子:

    class Base  
    {  
    protected:
            int i;  
    private:
            int j;  
    };
    class derive:public Base  
    {  
    public:  
        int f(derive& s)  
        {  
            s.i = 0;    //正确 可以在派生类中通过派生类对象访问基类的受保护成员 但基类私有成员不可访问  
            return i;  
        }  
        int f(Base& s)  
        {  
            s.i = 0;    //错误 不能在派生类中访问基类对象的受保护成员  
            return i;  
        }  
    };

    继承:

    继承的过程:

    1. 全盘接受基类的所有成员,但构造函数和析构函数除外。

    2. 根据继承方式改变基类成员在派生类中的访问控制权限。

    3. 同名覆盖。

    4. 添加派生类独有的新成员。

    要强调的是:所有继承方式(public,protected,private)不会影响派生类的访问权限,只会改变基类成员在派生类的访问属性。

    也就是说,即使是private继承,派生类依然可以访问基类的public和protected成员,只不过原来基类的成员在派生类中变成了private属性。

    仍然是刚才的例子:

    class Base
    {
    public:
            int i;
    protected:
            int j;
    private:
            int k;
    };
    class derive:private Base
    {
            //......
    };
    derive类使用了私有继承,但该类的成员函数依然可以访问Base类中的成员i和j,同时依然不能访问Base类中的成员k。

    private继承和protected继承的区别:

    在多重继承中能看出两者的区别,以两次继承为例:

    第一次继承如果使用private继承,那么基类的所有成员在子类中均为private,第二次继承时无论何种继承方式,孙类成员函数都不能访问任何子类继承自基类的成员。

    但如果第一次继承如果使用protected继承,基类public、protected成员在子类为protected,第二次继承时无论何种继承方式,孙类成员函数能访问子类继承自基类的public和protected成员。

    举个栗子:

    class Base
    {
    public:
            int i;
    protected:
            int j;
    private:
            int k;
    };
    class derive:protected Base
    {
    public:
            int m;
    };
    class re_derive :private derive    //private继承不影响对基类public和protected成员的访问
    {
    public:
    	void f()
    	{
                    i = 0; j = 0;    //由于第一次继承是protected继承 因此可以访问子类继承自基类的成员i,j
                                     //倘若第一次继承是私有继承 i,j将都不可访问
    	}
    };

    参考文献:

    [1]Lippman,S.B. & Lajoie,J. & Moo,B.E.著; 王刚 & 杨巨峰译.C++ Primer中文版:第五版[M].北京:电子工业出版社,2013.9:542-544

    展开全文
  • public private 和protected 继承   在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。 1. public 从语义...
  • 继承时,在派生类有不同。二 总结有两点,如下: 1对象与类的关系: 基类对象不能访问基类的protected的成员 但是类与类之间,派生类可以访问基类的protected的成员。 2从继承的角度: private成员是不能...
  • C++ protected friend 继承

    千次阅读 2016-08-22 16:01:58
    protected专门就是为继承(子类)设计的 用public继承 那么基类所有的访问标识在子类不变 protected还是protected protected只有类本身 和类的子类可以访问,对象是无法访问的! 除了在继承上 他跟private没有...
  • 私有继承(private):继承的访问控制:基类的public和protected成员:都以private身份出现在派生类中基类的private成员:不可直接访问访问权限:派生类中的成员函数:可以直接访问基类中的public和protected成员,但...
  • 1, 公有继承(public) 基类成员对其对象的可见性与一般类及其对象的可见性相同,public成员可见,protected和private成员不可见。 基类成员对派生类的可见性对派生类来说,基类的public和protected成员可见...
  • 考虑从基类B派生出的类D:   ——如果B是private基类,那么它的public和protected成员只能由D的成员函数和友元访问。  只有D的成员和友元能将D*转换成B*。   ——如果B是...
  • 不同的继承方式的影响主要体现在: ...public继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成: public(类内:可访问(直接访问);类外:可访问(直接访问)),protected(类内:可...
  • public、privete和protected 继承

    千次阅读 2013-07-14 17:05:04
    在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。 1. public 从语义角度上来说,public继承是一种接口继承,...
  • 在C++ 中继承主要有三种关系:public 、protected 和private 。这三种继承关系中public 继承是最为常用的一种继承关系,private 继承是最少见的继承关系。 1. public 从语义角度上来说,public 继承是一种接
  • 什么时候需要protected继承

    千次阅读 2010-04-18 19:45:00
    要么public,要么private继承,从来没想过什么时候用到protected继承,这次还碰到了一个case就刚好用且只能用protected继承。 现在有一个类 Base,有一个保护成员函数foo和变量xclass Base{protected: void foo...
  • 首先说明:父类和之类在不同包中,那么父类中的default和private方法都不能被子类继承。 java中protected 1. protected 访问控制符能被用于方法和成员变量。  2. 声明为protected的方法和成员变量能被同...
  • * All rights reserved. * 作 者: 石尧 * 完成日期:2014 年05月 13日 ...* 问题描述:protected继承下的访问权限和继承方式。 * 样例输入:略. * 样例输出:略。 * 问题分析:略。 */ #include using name
  • public、private、protected继承

    千次阅读 2013-07-17 17:29:29
     public、private、protected继承只是影响到基类的public成员和protected成员。对于基类的private只有基类的成员可以访问。就算是限制最松的public继承,在派生类中的成员也不能访问基类的private成员,只能通过...
  • C++中的继承 public protected private

    千次阅读 2014-03-28 11:03:50
    public protected private共有继承 public protected 不可见私有继承 private private 不可见保护继承 protected protected 不可见 #include using namespace std; ////////
  • 现在来看一下private,protected,public修饰的成员属性在保护继承的派生类中的可见情况。
  • java继承protected权限再理解

    千次阅读 2018-04-06 21:28:47
    java会继承父类中default权限以上的成员 父类的private成员不会被子类继承,子类不能访问。但是子类对象的确包含父类的私有成员。 父类的 包访问成员 继承为子类的包访问成员。就好像他们直接定义在子类中一样。 ...
  • C++中public、protected、private继承的区别

    千次阅读 多人点赞 2018-06-19 23:20:58
    在学习C++时经常混淆public、protected、private在继承中的概念,于是写在此博客加深理解。 首先记住以下三点: - 用户代码(类外)只能访问public成员变量和public成员函数。 - 子类(继承类)能访问基类的...
  • 一、继承的方式(public、protect、private) 派生方式有三种:public、protected、private 如果不写继承方式,默认为private方式继承(备注:...protected成员,在子类相应变化 二、演示案例 //公有继承...
  • 类中的属性:private、protected、public 属性的话,针对于他们的作用范围来讲。...继承的话就要针对类来讲,protected继承就是基类的protected成员或者public成员都继承在了子类的protected属性下。以此类推。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 452,468
精华内容 180,987
关键字:

继承会继承protected