(1.1.11)继承、公有、保护、私有继承和多重继承等


(1)多重继承,构造函数从最初是的基类开始构造,各个类的同名变量没有形成覆盖,都是各自的变量。

(2)公有继承与私有继承

     1)公有继承就像是三口之家的小孩,饱受父母的温暖,享有父母的一切(public和protected的成员)。 其中保护的成员不能被外界所享有,但可以为小孩所拥有。 只是父母还是有其一点点隐私(private成员)不能为小孩所知道。

       其派生类可对基类的公有变量:访问+修改,保护变量:访问,私有变量:无

      其派生类对象对基类的公有成员:可访问  ;其他:无
    2)私有继承就像是离家出走的小孩,父类所有元素无法和子类联系:一个人在外面飘泊。他(她)不能拥有父母的住房和财产(如:gir.eat()是非法的), 在外面自然也就不能代表其父母,甚至他(她)不算是其父母的小孩。但是在他(她)的身体中,流淌着父母的血液,所以,在小孩自己的行为中又有其与父母相似的成分。

        C++的默认集成方式,其派生类可对基类的公有变量:访问,保护变量:访问,私有变量:无

       其派生类对象对基类的:所有不可见

   3)保护继承

       其派生类可对基类的公有变量:访问,保护变量:访问,私有变量:无

      其派生类对象对基类的:所有不可见

    #include
    class Animal
    {
     public:
      Animal(){}
      void eat(){cout<<"eat\n";}
    };
    class Giraffe:protected Animal
    {
     Giraffe(){}
     void StrechNeck(double){cout<<"strechneck\n";}
     void take()
     {
      eat(); //ok
     }
    };
    void main()
    { 
     Giraffe gir;
     gir.eat(); //error
     gir.take(); //ok
     gir.StretchNeck();
    }

(3)多重继承

   1)C:A,B     A和B出现了相同方法f(),在C中的区别为C.A::f()与C.B::F()






对于公有继承方式
(1) 基类成员对其对象的可见性:
公有成员可见,其他不可见。这里保护成员同于私有成员。
(2) 基类成员对派生类的可见性:
公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。
(3) 基类成员对派生类对象的可见性:
公有成员可见,其他成员不可见。
所以,在公有继承时, 派生类的对象可以访问基类中的公有成员; 派生类的成员函数可以访问基类中的 公有成员和保护成员。这里,一定要 区分清楚 派生类的对象和派生类中的成员函数对基类的访问是不同的。

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

对于保护继承方式
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。
上述所说的可见性也就是可访问性。关于可访问性还有另的一种说法。这种规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值