C++可擴(kuò)展的編程模式

字號(hào):


    注意:設(shè)計(jì)原則----盡量不要去修改基類內(nèi)容,有新的東西要從派生類中去實(shí)現(xiàn)。層層派生。派生模式使得可擴(kuò)展、
    #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 //圓形
    };
    //抽象鐘表基類。將鐘表類通用方法,例如顯示時(shí)間抽象出來,放在基類中。
    class Clock
    {
    public:
    inline string GetTime() //顯示時(shí)間的方法通用,所以抽出來作為基類中方法
    {
    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; //轉(zhuǎn)換Hour
    memset(pTemp, 0, 24);
    itoa(nMinute, pTemp, 10);
    string sMinute = pTemp; //轉(zhuǎn)換分鐘
    memset(pTemp, 0, 24);
    itoa(nSecond, pTemp, 10);
    string sSecond = pTemp; //轉(zhuǎn)換秒數(shù)
    string sTime = sHour + ":" + sMinute + ":" + sSecond;
    if (pTemp)
    {
    delete [] pTemp;
    pTemp = NULL;
    }
    return sTime;
    }
    //返回表的外觀顏色
    virtual int GetColor() = 0; //純虛函數(shù),抽象類不能實(shí)例化對(duì)象
    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;
    }
    };
    //后續(xù)鬧鐘有功能增加了,需要從AlarmClock類派生,而不是從Clock派生
    class AlramClockExtend : public AlarmClock
    {
    public:
    void Alarm() //添加了鬧鈴功能
    {
    cout<<"Alarm"<<endl;
    }
    };
    #endif