精华内容
下载资源
问答
  • 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有...

    C++继承:公有,私有,保护

     

    公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。

    1. 公有继承(public)

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

    2. 私有继承(private)

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

    3. 保护继承(protected)

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

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

     

    public

    protected

    private

    共有继承

    public

    protected

    不可见

    私有继承

    private

    private

    不可见

    保护继承

    protected

    protected

    不可见

    在上图中:1)基类成员对派生类都是:共有和保护的成员是可见的,私有的的成员是不可见的。

                      2)基类成员对派生类的对象来说:要看基类的成员在派生类中变成了什么类型的成员。如:私有继承时,基类的共有成员和私有成员都变成了派生类中的私有成员,因此对于派生类中的对象来说基类的共有成员和私有成员就是不可见的。

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

    对于公有继承方式

    (1) 基类成员对其对象的可见性:

    公有成员可见,其他不可见。这里保护成员同于私有成员。

    (2) 基类成员对派生类的可见性:

    公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。

    (3) 基类成员对派生类对象的可见性:

    公有成员可见,其他成员不可见。

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

    对于私有继承方式

    (1) 基类成员对其对象的可见性:

    公有成员可见,其他成员不可见。

    (2) 基类成员对派生类的可见性:

    公有成员和保护成员是可见的,而私有成员是不可见的。

    (3) 基类成员对派生类对象的可见性:

    所有成员都是不可见的。

    所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

    对于保护继承方式

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

    上述所说的可见性也就是可访问性。

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

    看看这样的例子

    #include<iostream>

    using namespace std;

    //

    class A      //父类

    {

    private:

        int privatedateA;

    protected:

        int protecteddateA;

    public:

        int publicdateA;

    };

    //

    class B:public A      //基类A的派生类B(共有继承)

    {

    public:

        void funct()

        {

            int b;

            b=privatedateA;  //error:基类中私有成员在派生类中是不可见的

            b=protecteddateA;//ok:基类的保护成员在派生类中为保护成员

            b=publicdateA;   //ok:基类的公共成员在派生类中为公共成员

        }

    };

    //

    class C :private A  //基类A的派生类C(私有继承)

    {

    public:

        void funct()

        {

            int c;

            c=privatedateA;   //error:基类中私有成员在派生类中是不可见的

            c=protecteddateA; //ok:基类的保护成员在派生类中为私有成员

            c=publicdateA;    //ok:基类的公共成员在派生类中为私有成员

        }

    };

    //

    class D :protected A  //基类A的派生类D(保护继承)

    {

    public:

        void funct()

        {

            int d;

            d=privatedateA;  //error:基类中私有成员在派生类中是不可见的

            d=protecteddateA;//ok:基类的保护成员在派生类中为保护成员

            d=publicdateA;   //ok:基类的公共成员在派生类中为保护成员

        }

    };

    //

    int main()

    {

        int a;

     

        B objB;

        a=objB.privatedateA;  //error:基类中私有成员在派生类中是不可见的,对对象不可见

        a=objB.protecteddateA;//error:基类的保护成员在派生类中为保护成员,对对象不可见

        a=objB.publicdateA;   //ok:基类的公共成员在派生类中为公共成员,对对象可见

     

        C objC;

        a=objC.privatedateA;  //error:基类中私有成员在派生类中是不可见的,对对象不可见

        a=objC.protecteddateA;//error:基类的保护成员在派生类中为私有成员,对对象不可见

        a=objC.publicdateA;   //error:基类的公共成员在派生类中为私有成员,对对象不可见

     

        D objD;

        a=objD.privatedateA;  //error:基类中私有成员在派生类中是不可见的,对对象不可见

        a=objD.protecteddateA;//error:基类的保护成员在派生类中为保护成员,对对象不可见

        a=objD.publicdateA;   //error:基类的公共成员在派生类中为保护成员,对对象不可见

     

        return 0;

    }

     

    展开全文
  • C++继承:公有继承、保护继承、私有继承2 公有继承 公有继承时,对基类的共有成员保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员保护成员,但是访问不了基类的私有成员。派生类的对象只能...

    C++种public、protected、private总结1

    1. public:类内、类的对象;派生类、派生类对象均可访问
    2. protected:类内、派生类内可以访问;类的对象、派生类的对象不可访问
    3. private:只有类内可以访问;类的对象、派生类内、派生类的对象不可访问

    C++继承:公有继承、保护继承、私有继承2

    1. 公有继承
      公有继承时,对基类的共有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象只能访问派生类的公有成员(包括继承的公有成员),访问不了保护成员和私有成员。
    2. 保护继承
      保护继承时,基类的公有成员和保护成员被派生类继承后变成保护成员,派生类的新增成员函数可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象不可以访问派生类继承基类的公有成员、保护成员和私有成员。
    3. 私有继承
      私有继承时,基类的公有成员和保护成员都被派生类继承下来后变成了私有成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象不能访问派生类继承基类的公有成员,保护成员和私有成员。
    public protected private
    公有继承 public protected 不可见
    保护继承 protected protected 不可见
    私有继承 private private 不可见

    1. https://blog.csdn.net/NichChen/article/details/81199596 ↩︎

    2. https://blog.csdn.net/sxtdzj/article/details/81906504 ↩︎

    展开全文
  • 具体说,就是基类的公有成员和保护成员被继承到派生类中以后同样成为派生类的公有成员和保护成员,派生类中新增成员对他们可以直接访问,派生类的对象只能访问继承的基类公有成员。但是派生类的新增成员派生类的...

    public:

    公有继承时,对基类中的公有成员和保护成员的访问属性都不变,而对基类的私有成员则不能访问。具体说,就是基类的公有成员和保护成员被继承到派生类中以后同样成为派生类的公有成员和保护成员,派生类中新增成员对他们可以直接访问,派生类的对象只能访问继承的基类公有成员。但是派生类的新增成员和派生类的对象都不能访问基类的私有成员。
    派生类新增成员对基类数据权限 派生class对象访问权限
    |public |public |有 |有|
    |protected|protected | |有 无|
    |private |private |无 |无|

    protected:

    在保护继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派生类中不能访问。因为基类的公有成员和保护成员在派生类中都成了保护成员,所以派生类的新增成员可以直接访问基类的公有成员和保护成员,而派生类的对象不能访问它们(类的对象也是处于类外的,不能访问类的保护成员)。对基类的私有成员,派生类的新增成员函数和派生类对象都不能访问。
    派生类新增成员对基类数据权限 派生class对象访问权限public protected 有 无
    protected protected 有 无
    private private 无 无

    private:

    在私有继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的私有成员,而基类的私有成员在派生类中不能访问。派生类的新增成员可以直接访问基类的公有成员和保护成员,但是在类的外部通过派生类的对象不能访问它们。而派生类的成员和派生类的对象都不能访问基类的私有成员。
    派生类新增成员对基类数据权限 派生class对象访问权限
    public private 有 无
    protected private 有 无
    private private 无 无

    展开全文
  • class TA { private: int a; protected: int b; public: int c; };//定义类TA; class TB:public TA{}; //#1 class TB:protected TA{}; //#2 ...1.公有继承、保护继承、私有继承不会改


    class TA
    {
    private:
    int a;
    protected:
    int b;
    public:
    int c;
    };//定义类TA;

    class TB:public TA{};   //#1

    class TB:protected TA{};  //#2

    class TB:private TA{};   //#3


    1.公有继承、保护继承、私有继承不会改变基类TA成员a b c在TB中的访问权限,即#1 #2 #3 三种场景下,TB的成员函数都只能范文b c.

    2.公有继承、保护继承、私有继承会影响TB定义的对象及继承TB的类对a b c的访问权限。

    (1)场景#1,a b c在TB中的访问权限不变,还分别是private protected public,则c可以被TB对象和TB的子类成员函数访问,b只能被TB的子类成员函数访问。

    (2)场景#2,a b c在TB中的访问权限为private protected protected,b c能在TB子类成员函数中被访问,不能被TB对象直接访问。

    (3)场景#3,a b c在TB中的访问权限为private private  private ,a b c不能被TB子类成员函数访问,也不能被TB对象直接访问。

    展开全文
  • C++中有三种继承方式公有继承(public)、私有继承(private)和保护继承(protected)。 1. 公有继承(public) 公有继承:基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然...
  • 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类
  • //公有继承:基类的公有和保护成员派生类中仍然是公有和保护成员,可以由派生类的成员函数来访问, //派生类对象可以访问公有的成员,至于基类的私有成员,无论是派生类的成员函数,还是派生类的对象,都无法访问 /...
  • 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员... 保护继承(protected) 保护继承的特点是基类的所有公有成员保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或
  • (1) 派生类中:三种派生方式下,都是只有基类的私有成员不能被访问。 (2) 关于基类成员的访问属性: 公有派生:基类各成员的访问属性均不变,基类的私有成员派生类中不能被访问,也即被隐藏了,但这并不...
  • c++公有继承、保护继承和私有继承

    千次阅读 2016-12-19 20:45:46
    C++中的继承方式有:  public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。  (1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被...
  • 假设现在有一个名叫大地主的类,他有下面三个成员:公有成员:一块空地保护成员:传家宝私有成员:QQ号所谓公有成员,就是你可以大地主商量,让他把空地租给你,对外说的时候,你要说清楚你这个地是大地主的一块...
  • C++公有继承,保护继承,私有继承的区别

    万次阅读 多人点赞 2018-08-21 15:34:32
    公有继承时,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。派生类的对象只能访问派生类的公有成员(包括继承公有成员),访问不了...
  • 派生类继承了基类的全部数据成员除了构造函数、析构函数之外的全部函数成员,但是,这些成员的访问属性派生过程中是可以...类的继承方式有:公有继承、私有继承、保护继承当类的继承方式公有继承时:基类的p...
  • c++的继承方式有三种,这点java是不一样的,分别是公有保护、私有。 格式如下: class A {...}; class B: [private | protected | public] A { ... } 其作用也很简单,就是改变父类的成员的可访问性。 可访问...
  • c++的继承控制中,有三种不同的控制权限,分别是public、protectedprivate。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承...
  • 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员...
  • 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员...
  • 保护继承中,基类的公有成员保护成员被派生类继承后变成保护成员,派生类的新增成员可以访问基类的公有成员保护成员,但是访问不了基类的私有成员。派生类的对象不能访问派生类继承基类的公有成员,保护成员...
  • C++继承之公有继承、私有继承、保护继承
  • c++的继承控制中,有三种不同的控制权限,分别是public、protectedprivate。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承...
  • 1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。 2. 私有继承(private) 私有... 保护继承(protected) 保护继承的特
  • c++的继承控制中,有三种不同的控制权限,分别是public、protectedprivate。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承...
  • 1)基类成员对派生类的可见性 1. 公有继承(public) :基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这...3. 保护继承(protected) :基类的所有公有
  • 公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。 私有继承时基类中各成员...
  • 公有继承,私有继承,和保护继承

    千次阅读 2007-09-04 16:50:00
    1. 公有继承(public) 公有继承的特点是基类的公有成员保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。 2. 私有继承(private) 私有继承的特点... 保护继承(protected) 保护继承
  • //公有继承,私有继承,保护继承下访问父类子类的区别。 #include using namespace std; //父类,基类 class Parent { private:int i1; protected:int i2; public:int i3; }; //公有继承 class Child1 : ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,459
精华内容 12,183
关键字:

在公有和保护继承方式下