学习笔记:编写Clock类,同时学习operator重载符的使用

参考书目: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();
}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值