参考书目:C/C++规范设计简明教程——思维训练、上级实验指导,P216
目的:编写Clock类,同时学习operator重载符的使用
第一步:建立win32工程,项目名称为:TestClockClass
第二步:添加Clock类,头文件Clock.h如下:
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
using namespace std;
class Clock
{
private:
int fHour, fMinute, fSecond; //私有变量,时、分、秒
public:
Clock(); //构造函数,借助new
Clock(int hour, int minute, int second); //初始化函数,带默认参数
void inc();
void showClock();
Clock operator++(); //重载前缀++
Clock operator++(int); //重载后缀++
bool operator==(const Clock &c); //重载==
Clock & operator=(const Clock &c); //重载=
void *operator new(size_t size); //重载new
void operator delete(void *ptr); //重载delete
void *operator new[](size_t size); //重载new[]
void operator delete[](void *ptr); //重载delete[]
};
源文件Clock.cpp如下
#include "Clock.h"
Clock::Clock() //构造函数,借助new
{
}
Clock::Clock(int hour, int minute, int second) //初始化函数,带默认参数
{
this->fHour = hour;
this->fMinute = minute;
this->fSecond = second; //这里可以换成this.fSecond = second;吗
}
void Clock::inc()
{
fSecond++;
if (fSecond >= 60)
{
fSecond = 0;
fMinute ++;
if (fMinute >= 60)
{
fMinute = 0;
fHour++;
if (fHour >= 24)
fHour = 0;
}
}
}
void Clock::showClock()
{
cout << fHour << ":" << fMinute << ":" << fSecond << endl;
}
Clock Clock::operator++() //重载前缀++
{
inc();
return Clock(fHour, fMinute, fSecond);
}
Clock Clock::operator++(int) //重载后缀++
{
Clock c(fHour, fMinute, fSecond);
inc();
return c;
}
bool Clock::operator==(const Clock &c) //重载==
{
bool bResult = (fHour == c.fHour) && (fMinute == c.fMinute) &&
(fSecond == c.fSecond);
return bResult;
}
Clock & Clock::operator=(const Clock &c) //重载=
{
fHour = c.fHour;
fMinute = c.fMinute;
fSecond = c.fSecond;
return (*this);
}
void * Clock::operator new(size_t size) //重载new
{
char *p = (char*)malloc(size);
memset(p, 0, size); //对时分秒初始化为0
return p;
}
void Clock::operator delete(void *ptr) //重载delete
{
free(ptr);
}
void * Clock::operator new[](size_t size) //重载new[]
{
return malloc(size);
}
void Clock::operator delete[](void *ptr) //重载delete[]
{
free(ptr);
}
第三步:编写主文件
//测试Clock类
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "Clock.h"
#include <Windows.h>
using namespace std;
int main()
{
cout << "Hello World!\n";
Clock c;
c.showClock(); //结果为随机值,因为尚未赋初值
Clock *pClock;
pClock = new Clock();
pClock->showClock();
(*pClock)++;
pClock->showClock(); //应该显示 0:0:1
while (1)
{
(*pClock)++;
system("cls"); //清空屏幕
pClock->showClock();
Sleep(1000); //暂停1秒
}
getchar();
}
运行结果如下: