C++可擴充的編程模式

來源:互聯網
上載者:User

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

#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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.