• 多态应用实例--制作饮品


     1 #include<iostream>
     2 using namespace std;
     3 
     4 class AbstractDrinking
     5 {
     6 public: // 注意这里不写的话默认是private的
     7     // 纯虚函数
     8     // 这个类叫抽象类,无法实例化对象,子类必须重写父类中的函数
     9     virtual void boil() = 0;
    10     virtual void Brew() = 0;
    11     virtual void PourIncup() = 0;
    12     virtual void Add() = 0;
    13     void makeDrink() {
    14         boil();
    15         Brew();
    16         PourIncup();
    17         Add();
    18     }
    19 };
    20 
    21 class Coffee : public AbstractDrinking
    22 {
    23 public:
    24     void boil() {
    25         cout << "煮水" << endl;
    26     }
    27     virtual void Brew() {
    28         cout << "加咖啡" << endl;
    29     }
    30     virtual void PourIncup() {
    31         cout << "倒水" << endl;
    32     }
    33     virtual void Add() {
    34         cout << "加牛奶" << endl;
    35     }
    36     
    37 };
    38 
    39 class Tea : public AbstractDrinking
    40 {
    41 public:
    42     void boil() {
    43         cout << "煮水" << endl;
    44     }
    45     virtual void Brew() {
    46         cout << "加茶叶" << endl;
    47     }
    48     virtual void PourIncup() {
    49         cout << "倒水进杯" << endl;
    50     }
    51     virtual void Add() {
    52         cout << "加点枸杞" << endl;
    53     }
    54 
    55 };
    56 void doWork(AbstractDrinking * abs) {
    57     abs->makeDrink();
    58     delete abs; // 释放堆区的数据
    59 }
    60 void test01() {
    61     doWork(new Coffee);
    62 
    63     cout << "chaye " << endl;
    64 
    65     doWork(new Tea);
    66 }
    67 
    68 
    69 
    70 int main() {
    71 
    72     test01();
    73     return 0;
    74 }
  • 相关阅读:
    网站页面性能优化的 34条黄金守则 (雅虎团队经验)
    进程调度算法小结
    玩转TCP连接
    数据包在网络中的流转
    浅入理解JVM虚拟机
    Leecode no.47 全排列 II
    Leecode no.143 重排链表
    关于我用设计模式对公司代码重构的这件事
    进程间通信方式小结
    Leecode no.82 删除排序链表中的重复元素 II
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14327488.html
Copyright © 2020-2023  润新知