码迷,mamicode.com
首页 > 编程语言 > 详细

C++进阶--公有继承的二元性

时间:2018-12-25 22:52:41      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:ping   enc   pre   膨胀   概念   --   ati   类型   public   

//###########################################################################
/* 
 * 公有继承的两元性
 *
 *   - 接口的继承
 *   - 实现的继承
 */

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.\n";}
      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. 最小化实现继承的层数
 */



/* 
 * 继承是否是魔鬼 ???
 * 
 * 继承有时候有用,但是往往过度使用了
 */

C++进阶--公有继承的二元性

标签:ping   enc   pre   膨胀   概念   --   ati   类型   public   

原文地址:https://www.cnblogs.com/logchen/p/10176841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!