程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C++可擴展的編程模式

C++可擴展的編程模式

編輯:更多關於編程

     注意:設計原則----盡量不要去修改基類內容,有新的東西要從派生類中去實現。層層派生。派生模式使得可擴展、

    #ifndef WIN_32_TEST_H
    #define WIN_32_TEST_H
    #include <iostream>
    #include <ctime>
    #include <string>
    using std::endl;
    using std::cout;
    using std::string;

    //鐘表的幾種顏色
    enum Color
    {
    red,
    blue,
    white,
    black
    };

    //鐘表的形狀
    enum Shape
    {
    square, //方形
    circle //圓形
    };

    //抽象鐘表基類。將鐘表類通用方法,例如顯示時間抽象出來,放在基類中。
    class Clock
    {
    public:
    inline string GetTime() //顯示時間的方法通用,所以抽出來作為基類中方法
    {
    time(&now);
    NT = localtime(&now);
    int nHour = NT->tm_hour;
    int nMinute = NT->tm_min;
    int nSecond = NT->tm_sec;
    char *pTemp = new char[24];
    memset(pTemp, 0, 24);
    itoa(nHour, pTemp, 10);
    string sHour = pTemp; //轉換Hour
    memset(pTemp, 0, 24);
    itoa(nMinute, pTemp, 10);
    string sMinute = pTemp; //轉換分鐘
    memset(pTemp, 0, 24);
    itoa(nSecond, pTemp, 10);
    string sSecond = pTemp; //轉換秒數
    string sTime = sHour + ":" + sMinute + ":" + sSecond;
    if (pTemp)
    {
    delete [] pTemp;
    pTemp = NULL;
    }
    return sTime;
    }

    //返回表的外觀顏色
    virtual int GetColor() = 0; //純虛函數,抽象類不能實例化對象

    private:
    time_t now;
    struct tm *NT;
    };

    //派生類---掛鐘
    class WallClock : public Clock
    {
    public:
    int GetColor() //重寫派生類的虛方法
    {
    return red;
    }


    //掛鐘的形狀,派生類自己的方法
    int GetShape()
    {
    return square;
    }
    };

    //派生類---鬧鐘
    class AlarmClock : public Clock
    {
    public:
    int GetColor()
    {
    return black;
    }


    //鬧鐘形狀----鬧鐘類自己的方法
    int GetShape()
    {
    return circle;
    }
    };

    //後續鬧鐘有功能增加了,需要從AlarmClock類派生,而不是從Clock派生
    class AlramClockExtend : public AlarmClock
    {
    public:
    void Alarm() //添加了鬧鈴功能
    {
    cout<<"Alarm"<<endl;
    }
    };

    #endif

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved