検索

ホームページ  >  に質問  >  本文

c++ - 派生类的继承访问

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<code>class A

{

private:

    int age;

};

class B:private A

{

public:

 int Getage()

 {

    return age;

 }

};

 B b1;

 cout<< b1.Getage()<<endl; 派生类私有继承基类之后,基类中的所有成员相对于派生类都是私有的,派生类的成员函数无法访问基类中的私有成员,所以return age失败。

 

class A

{

protected:

 int age;

};

class B:private A

{

public:

 int Getage()

 {

  return age;

 }

};

 B b1;

 cout<< b1.Getage()<<endl; 将int age改成protected,继承方式还是private,为什么就可以访问了呢?私有继承基类之后,基类成员在派生类中不都是私有的吗?

 

 

 

</code>

阿神阿神2890日前830

全員に返信(4)返信します

  • ringa_lee

    ringa_lee2017-04-17 12:00:01

    private成员是不能被子类继承的,只属于该类本身。
    protected和public成员才可以被子类继承。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 12:00:01

    试试这个

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    <code>cpp</code><code>class A {

    public:

        int age;

    }

     

    class B: public A {

    }

     

    class C: private A {

    }

     

    B b;

    int ba = b.age;

     

    C c;

    int ca = c.age;

    </code>

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 12:00:01

    你的理解有误
    子类私有继承基类的protected/public,这个成员会变成子类的private成员,相当于变成

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    <code>class B:private A

    {

    private:

       int age;

    public:

     int Getage()

     {

      return age;

     }

    };

    </code>

    自己当然可以访问自己的私有成员了,所以私有继承的用法就是不仅让子类无法继承自己的private成员(所有类型的继承都是这样),而且自己的非private成员,也变成只能继承一次,防止了多层继承。

    付一张表格
    基类中 继承方式 子类中

    public & public继承 => public

    public & protected继承 => protected

    public & private继承 = > private

    protected & public继承 => protected

    protected & protected继承 => protected

    protected & private继承 = > private

    private & public继承 => 子类无权访问

    private & protected继承 => 子类无权访问

    private & private继承 = > 子类无权访问

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 12:00:01

    C++ primer第五版P543&&P544
    派生访问说明符,也就是私有继承,共有继承对于派生类的成员和友元来说没什么影响。
    派生访问说明符的目的是控制派生类用户对于基类成员的访问权限。。额 有点抽象是吧,,没事,你看下书就知道了。。哈哈

    返事
    0
  • キャンセル返事