zoukankan      html  css  js  c++  java
  • 继承关系·

         C++继承方式有公有继承,私有继承,保护继承。值得注意的是,基类私有成员在任用任何继承方式下都是隔离的,也就是视派生类为外人。在公有继承中,基类的每个成员在子类中保证相同的访问方式,在基类为public 成员,则在子类也是public成员,在基类为保护成员则在子类也是保护成员。对于保护继承,基类的公有成员和保护成员继承到子类都变成了保护成员。

       C++具有单一继承和多重继承。多重继承在实现时并不容易,主要是编译问题,模糊性问题,调试问题也很多,一般只有高级程序员才使用多重继承。如下例子:

    #include<iostream>
    using namespace std;

    class Furniture{
    protected :
    double weight;
    public:
    void setWeight(double i){ weight = i; }
    double getWeight(){ return weight; }
    };

    class Bed :virtual public Furniture{
    public:
    void sleep();
    };

    class Sofa :virtual public Furniture{
    public:
    void wacthTV(){};
    };

    class SleeperSofa :public Sofa, public Bed{
    public:
    void floadOut(){};
    };

    int main(){
    SleeperSofa f;
    f.setWeight(1.0);
    }

    上面程序中,Furniture是最初的基类,Bed类和Sofa类都从Furniture虚拟继承而来,而SleepSofa则继承于Bed和Sofa类,若不加上virtual关键字,则会产生歧义,这是由于在子类SleepSofa中继承的weight和setWeight到低来自哪里?是继承自Bed类还是,Sofa类,这样就产生了模糊不清的问题,如今的SleepSofa继承了Furniture的两个副本。当加上virtual关键字后,表明,Bed类和Sofa类都从Furniture虚拟继承,这样后代就保证了只继承一个副本,就不会产生歧义。

  • 相关阅读:
    github添加版本号
    centOS 7联网
    运用session来控制用户的异地登录被挤下线情况
    寻找节点d=n的节点算法
    基于Seajs的可控台球碰撞游戏
    RequireJs 源码解读及思考
    BackBone 源码解读及思考
    关于「远程兼职」
    cocos2d-html5 中的性能优化
    细说移动前端Android联调
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5094408.html
Copyright © 2011-2022 走看看