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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值