精华内容
下载资源
问答
  • 继承 public protect private

    千次阅读 2018-11-06 21:27:10
     2:使用关键字class时默认的继承方式是private, 使用struct时默认的继承方式是public, 不过最好显式的写出继承方式。 .3:在实际运用中一般使用都是public继承, 极少场景下才会使用protetced/private继承。  .....

     

     1:不管是哪种继承方式, 在派生类内部都可以访问基类的公有成员和保护成员 , 基类的私有成员存在但是在子类中不可见( 不能访问) 。
     2:使用关键字class时默认的继承方式是private使用struct时默认的继承方式是public, 不过最好显式的写出继承方式。
    .3:在实际运用中一般使用都是public继承, 极少场景下才会使用protetced/private继承。

       继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。简单的说,继承是指一个对象直接使用另一对象的属性和方法。继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单到复杂的认知过程。C++中的继承关系就好比现实生活中的父子关系,继承一笔财产比白手起家要容易得多,原始类称为基类,继承类称为派生类,它们是类似于父亲和儿子的关系,所以也分别叫父类和子类。而子类又可以当成父类,被另外的类继承。继承的方式有三种分别为公有继承(public),保护继承(protect),私有继承(private)。
    定义格式如下:

    2、继承方式及访问属性

    (1) 公有继承(public)

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

    (2)私有继承(private)

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

    (3)保护继承(protected)

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

      private能够对外部和子类保密,即除了成员所在的类本身可以访问之外,别的都不能直接访问。protected能够对外部保密,但允许子类直接访问这些成员。public、private和protected对成员数据或成员函数的保护程度可以用下表来描述举个栗子:

    复制代码

     1 class Base    //父类
     2 {
     3    private: 
     4        int _priB;
     5    protected:
     6        int _proB;
     7    public:
     8        int _pubB;
     9 } ;
    10 class Derived: public Base    //子类,继承自base,继承类型为公有继承
    11 {
    12    private:
    13       int _d_pri;
    14    protected:
    15       int _d_pro;
    16    public:
    17        void funct()
    18     {
    19         int d;
    20         d=_priB;       //error:基类中私有成员在派生类中是不可见的
    21         d=_proB;       //ok: 基类的保护成员在派生类中为保护成员
    22         d=_pubB;       //ok: 基类的公共成员在派生类中为公共成员
    23     }
    24       int _d_pub;
    25 } ;
    总结:(1). public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用, 因为每个子类对象也都是一个父类对象。
    26 class C :private Base    //基类Base的派生类C(私有继承)
    27 {
    28 public:
    29     void funct()
    30     {
    31         int c;
    32         c=_priB;      //error:基类中私有成员在派生类中是不可见的
    33         c=_proB;      //ok:基类的保护成员在派生类中为私有成员
    34         c=_pubB;      //ok:基类的公共成员在派生类中为私有成员
    35     }
    36 };
    37 class E :protected Base   //基类Base的派生类E(保护继承)
    38 {
    39 public:
    40     void funct()
    41     {
    42         int e ;
    43         e=_priB;    //error:基类中私有成员在派生类中是不可见的
    44         e=_proB;    //ok:基类的保护成员在派生类中为保护成员
    45         e=_pubB;    //ok:基类的公共成员在派生类中为保护成员
    46     }
    47 };
    总结:
    (2). 基类的private成员 在派生类中是不能被访问的, 如果基类成员 不想在类外直接被访问, 但需要 在派生类中能访问, 就定义为protected。 可以看出保护成员 限定符是因继承才出现的。
    (3). protected/private继承是一个实现继承, 基类的部分成员 并非完全成为子类接口 的一部分, 是 has-a 的关系原则, 所以非特殊情况下不会使用这两种继承关系, 在绝大多数的场景下使用的 都是公有继承。 私有继承以为这is-implemented-in-terms-of(是根据……实现的) 。 通常比组合(composition) 更低级, 但当一个派生类需要访问 基类保护成员 或需要重定义基类的虚函数时它就是合理的。
    
    49 int main()
    50 {
    51     int a; 
    53     D d;
    54     a=D._priB;     //error:公有继承基类中私有成员在派生类中是不可见的,对对象不可见
    55     a=D._proB;     //error:公有继承基类的保护成员在派生类中为保护成员,对对象不可见
    56     a=D._pubB;     //ok:公有继承基类的公共成员在派生类中为公共成员,对对象可见
    58     C c;
    59     a=c._priB;    //error:私有继承基类中私有成员在派生类中是不可见的, 对对象不可见
    60     a=c._proB;    //error:私有继承基类的保护成员在派生类中为私有成员,对对象不可见
    61     a=c._pubB;    //error:私有继承基类的公共成员在派生类中为私有成员,对对象不可见
    63     E e;
    64     a=e._priB;    //error:保护继承基类中私有成员在派生类中是不可见的, 对对象不可见
    65     a=e._proB;    //error:保护继承基类的保护成员在派生类中为保护成员,对对象不可见
    66     a=e._pubB;    //error:保护继承基类的公共成员在派生类中为保护成员,对对象不可见
    67  
    68     return 0;
    69 }

    复制代码

     

    在struct继承中,如果没有显式给出继承类型,则默认的为public继承;在class继承中,如果没有显式给出继承类型,则默认的为private继承;

     

    C++是支持多重继承的,但一定要慎用,因为很容易出现各种各样的问题。

    class C:public B2,public B1
    展开全文
  • protect.property 公有继承基类的保护成员在派生类中为保护成员,对对象不可见 public.property 公有继承基类的公共成员在派生类中为公共成员,对对象可见 private.property 私有继承基类中私有成员在派生类中是不...
    private.property 公有继承基类中私有成员在派生类中是不可见的,对对象不可见
    protect.property 公有继承基类的保护成员在派生类中为保护成员,对对象不可见
    public.property  公有继承基类的公共成员在派生类中为公共成员,对对象可见
    
    private.property 私有继承基类中私有成员在派生类中是不可见的, 对对象不可见
    protect.property 私有继承基类的保护成员在派生类中为私有成员,对对象不可见
    public.property  私有继承基类的公共成员在派生类中为私有成员,对对象不可见
    
    private.property 保护继承基类中私有成员在派生类中是不可见的, 对对象不可见
    protect.property 保护继承基类的保护成员在派生类中为保护成员,对对象不可见
    public.property  保护继承基类的公共成员在派生类中为保护成员,对对象不可见

     

    展开全文
  • protect继承

    2017-09-06 21:22:06
    //a在基类中的访问属性是public,在protected继承中变成protect属性,所以仅限于在基类和当前子类中使用不可以再类的外部使用 //b = _b;//不可以访问,因为是基类的私有属性 d = _c;//可以在子类(派生类)中...

    实例:

    #include <iostream>
    using namespace std;
    class parent{
    public:
    	void print(void)
    	{
    		//cout << "a=:" << a << "    b=:" << b <<"    c=:"<< d << endl;
    	}
    	int a;
    private:
    	int b;
    protected:
    	int d;
    };
    #if 0
    class child1 :public parent
    {
    public:
    	void SetVar(int _a, int _b, int _c)
    	{
    		a = _a;
    		//b = _b;//不可以访问,因为是基类的私有属性
    		d = _c;//可以在子类(派生类)中使用,但也仅限于在类中,不可以再类外使用
    	}
    private:
    protected:
    };
    #endif
    
    /*注释*/
    #if 0
    class child2: private parent
    {
    	void SetVar(int _a, int _b, int _c)
    	{
    		a = _a;
    		//b = _b;//不可以访问,因为是基类的私有属性
    		d = _c;//可以在子类(派生类)中使用,但也仅限于在类中,不可以再类外使用
    	}
    public:
    private:
    protected:
    };
    #endif
    class child3 :protected parent
    {
    	void SetVar(int _a, int _b, int _c)
    	{
    		a = _a;//a在基类中的访问属性是public,在protected继承中变成protect属性,所以仅限于在基类和当前子类中使用不可以再类的外部使用
    		//b = _b;//不可以访问,因为是基类的私有属性
    		d = _c;//可以在子类(派生类)中使用,但也仅限于在类中,不可以再类外使用
    	}
    public:
    private:
    protected:
    };
    int main()
    {
    	child3 oop;
    	/*这三种方式都不可以使用,因为在子类中的集成方式为protect,所以,a在派生类中的访问属性成为protected的了,
    	b的原属性为private,所以在protected中任然是private属性
    	d在基类的属性为protect,所以在protected集成中任然是protected,在类的外部不可以使用
    	*/
    	//oop.a = 100;
    	//oop.b = 1000;
    	//oop.d=10000  
    	system("pause");
    	return 0;
    }



    展开全文
  • *文件名称:长颈鹿类对动物类的继承 *作者:刘中林 *完成日期:2014 年 5 月 13日 *版本号:v1.0 *对任务及求解方法的描述部分: *输入描述:无 *问题描述:在下面的程序中要求的位置写下注释,声明相应的语句在语法...
    
    #include <iostream>
    using namespace std;
    class Animal
    {
    public:
        Animal() {}
        void eat()
        {
            cout << "eat\n";
        }
    protected:
        void play()
        {
            cout << "play\n";
        }
    private:
        void drink()
        {
            cout << "drink\n";
        }
    };
    class Giraffe: protected Animal
    {
    public:
        Giraffe() {}
        void StrechNeck()
        {
            cout << "Strech neck \n";
        }
        void take()
        {
            eat();    //正确,保护继承下,基类中的共有成员在派生类中的访问属性为受保护成员,在派生类中可见
            //drink();  //正确,保护继承下,基类中的私有成员在派生类中的访问属性为不可访问
            play();   // 正确,保护继承下,基类中受保护成员在派生类的访问属性为受保护成员,在派生类中可见
        }
    };
    int main()
    {
        Giraffe gir;
        //gir.eat();   // 错误,Giraffe的对象不能在类外访问本类中的受保护成员
        //gir.play();  // 错误,Giraffe的对象不能在类外访问本类中的受保护成员
        //gir.drink(); // 错误,Giraffe的对象不能在类外访问本类的不可访问函数
        return 0;
    }
    

    展开全文
  • 在c++中,public继承: 子类baochi
  • 三种访问方式 继承方式 权限 public 可以被任意实体访问 ...三种继承方式 ...public 继承 protect 继承 private 继承 九种组合 基类权限 继承方式 子类权限 public public 继承 public p...
  • *Copyright(c) 2016, 烟台大学计算机控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:李德坤 *完成日期:2016年5月1日 *版本号:v1.0 * *问题描述:存储班长信息类 *输入描述:无 ...
  • *Copyright(c) 2016, 烟台大学计算机控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:李德坤 *完成日期:2016年5月1日 *版本号:v1.0 * *问题描述:存储班长信息类 *输入描述:无 *输出...
  • public protect private继承

    2009-08-26 23:21:00
    引自原来在CGD讨论的几点总结:1.public继承被称为类型继承(typeinheritance)。往往反映is-a关系。2.protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但...
  • public、protect、private继承方式 C++

    千次阅读 2015-09-29 09:10:02
    public公有继承 protected保护继承 private私有继承我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.公有继承时,基类的private成员派生类也不可用,基类的public和...
  • 同时,也有三种继承方式:public,protect,private。 访问控制 访问控制是对类成员而言的,对非类成员而言,访问控制是不适用的。 在Java,C#中,也有访问控制的概念,不过Java和C#中,访问控制的用法C++...
  • // 正确,保护继承下,基类protected成员对派生类成员可见____ } }; int main() { Giraffe gir; //gir.eat(); // 错误,保护继承下,Giraffe类对象不可访问基类函数____ //gir.play(); // 错误,保护继承下,...
  • 关于protect继承的可见性

    千次阅读 2011-03-21 23:36:00
    在编译器中,protect继承的集成体系实际是不可见的,因此不能像public继承那样用static_cast转换体系中的指针,而在成员函数或者friend中是可以的。
  • 一、先来看一下没有继承的情况 类中的变量访问: (1)类内访问方式:通过public成员函数访问 (2)类外访问方式:直接访问 表 1 class A { public: int a; protected: int b; private: int c; ...
  • 主要参考了下面的文章,根据它来谈谈自己的...从语义角度上来说,public继承是一种接口继承(可以理解为子类对象可以调用父类的接口,也就有可能实现多态了)   从语法角度上来说,public继承后,关系见上图。很明
  • 最近在做滚动回弹的特效,继承了FrameLayout,发现无法调用View的protectchengyua
  • C++ 继承(public, protect, private)

    千次阅读 2017-02-14 12:16:12
    继承时: 不管采用哪种形式(public, protected或private),基类中的私有成员都不可以被继承;如果非要在派生类中使用基类的私有成员,可以有两种方法:一是使用属性,二是使用友元类或友元函数。 如果采用...
  • public,protect,private继承

    2009-09-06 11:28:00
    public继承被称为类型继承(type inheritance)。往往反映is-a关系。2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但不能在层次结构之外被访问。3....
  • public 不但可以继承父类的基类被定义的基类访问,也可以被外部对象调用.private 不能被定义的继承父类的基类访问,不可以被外部对象调用.protect 只能被定义的继承父类的基类访问,不可以被外部对象调用.class ...
  • 基础链接 总结: public继承基类成员访问权限没有变化;... private继承基类public和protected权限变为private,基类private不变,所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,084
精华内容 5,233
关键字:

继承与protect