zoukankan      html  css  js  c++  java
  • C++进阶--公有继承的二元性

    //###########################################################################
    /* 
     * 公有继承的两元性
     *
     *   - 接口的继承
     *   - 实现的继承
     */
    
    class Dog {
       public:
          virtual void bark() = 0;      //只继承了接口
          void run() { cout << "I am running."; }   //既继承了接口,也继承了实现
          virtual void eat() { cout << "I am eating. "; }
       protected:
          void sleep() { cout << " I am sleeping. "; }  //只继承了实现,没继承接口
    };
    
    class Yellowdog : public Dog{
       public:
          virtual void bark() { cout << "I am a yellow dog.
    ";}
          void iSleep() { sleep(); }
    };
    
    
    /*
     * C++中继承的类型:
     * 1. 纯虚公有函数 - 只继承接口
     * 2. 非虚公有函数 - 继承接口和实现
     * 3. 非纯虚公有函数 - 继承接口和默认实现
     * 4. 保护函数 - 只继承实现
     *
     * 作为程序设计师,有必要分清接口和实现的概念
     */
    
    
    
    
    /*
     * 接口继承用于
     *
     * 1. Subtyping
     * 2. Polymorphism
     */
      virtual void bark() = 0;
    
    /*
     * 陷阱:
     *  -- 小心接口膨胀
     *  -- 接口不应该显示实现
     */
    
    
    /*
     * 实现继承
     *    - 会增加代码的复杂性  //在写派生类的时候需要关注基类,在改基类的时候的还要时刻小心有没有破坏派生类
     *    - 不鼓励Not encouraged
     */
    public:
       void run() { cout << "I am running."; }
       virtual void eat() { cout << "I am eating. "; }
    protected:
       void sleep() { cout << " I am sleeping. "; }
    
    /*
     * 实现继承的指导原则:
     * 1. 不要为了代码重用而使用继承,使用组合替代
     * 2. 最小化基类的实现,基类要小巧
     * 3. 最小化实现继承的层数
     */
    
    
    
    /* 
     * 继承是否是魔鬼 ???
     * 
     * 继承有时候有用,但是往往过度使用了
     */
    
    
  • 相关阅读:
    编写zookeeper集群启动
    DDL/DML/DCL
    pom.xml 文件详解
    【已解决】严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
    IDEA常用技巧
    【已解决】ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes
    Hadoop_08 Hadoop重装
    软件需求分析三个层次
    Git练习网址
    Django跨域问题解决方案: django-cors-headers安装与配置
  • 原文地址:https://www.cnblogs.com/logchen/p/10176841.html
Copyright © 2011-2022 走看看