我正在编写一个实现工厂的程序
TimeManager
生成两种类型的对象;一
Timer
和a
StopWatch
. 这两个对象都派生自抽象类
TimePiece
,并共享常用方法。我希望工厂返回类型
计时器
,但因为
计时器
我不能实现额外的方法。我怎样才能
计时器
暴露
计时器
的额外方法,而不将其暴露于
秒表
何时创建这些各自的类型?我希望这是有意义的,因为这有点难以解释。
时间管理器。h类
enum TimePieceType{TIMER, STOP_WATCH};
class TimeManager {
public:
TimeManager();
~TimeManager();
void Tick();
TimePiece* AddTimePiece(TimePieceType timeType);
};
计时器。h类
enum RunningState { STOPPED, RUNNING, PAUSED };
class TimePiece {
private:
unsigned long startTime = 0;
unsigned long currentTime = 0;
unsigned long pauseOffset = 0;
protected:
Time time;
RunningState state = STOPPED;
public:
TimePiece() = default;
virtual ~TimePiece() = default;
void Stop();
void Start();
void Pause();
void Resume();
void Reset();
virtual void Tick();
Time GetTime();
RunningState GetState();
virtual uint8_t GetId() = 0;
};
秒表h类
class StopWatch : public TimePiece {
private:
uint8_t watchId = 0;
static int8_t currentId;
public:
StopWatch();
virtual ~StopWatch();
uint8_t GetId();
};
计时器。h类
class Timer : public TimePiece {
private:
uint8_t timerId = 0;
static int8_t currentId;
unsigned long timeout;
public:
Timer();
~Timer();
void Tick() override;
void SetTimeoutMs(unsigned long timeout);
void SetTimeoutSec(unsigned long timeout);
uint8_t GetId();
Time GetRemainingTime();
unsigned long GetTimeout();
};