C++类实践——时间类

本文介绍了C++中时间类的设计,包括构造函数、显示时间、增加时间等方法。通过改进add_a_sec(), add_a_minute(), add_an_hour()函数,利用inline关键字提高效率,并减少了时间开销。同时,提出了更优的add_secs(), add_minutes(), add_hours()实现,避免了循环,提高了性能。" 95869778,8670039,牛顿迭代法求n次方根详解,"['数学算法', '数值计算', '编程算法', '算法实现']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="html">#pragma once
#ifndef TIME_H
#define TIME_H

class Time {
public:
	Time() :hour(0), minute(0), sec(0) {};
	Time(int h, int m, int s) :hour(h), minute(m), sec(s) {};
	void show_time();      //显示时间
	void add_a_sec();      //增加一秒钟
	void add_a_minute();   //增加一分钟
	void add_an_hour();    //增加一小时
	void add_secs(int);    //增加n秒钟
	void add_minutes(int); //增加n分钟
	void add_hours(int);   //增加n小时
private:
	int hour, minute, sec;
	bool is_time();    //判断时间是否合法
};
#endif // !TIME_H
 
#include<iostream>
#include"time.h"
using namespace std;

bool Time::is_time() {
	if (hour < 0 || hour>23 || minute < 0 || minute>59 || dec < 0 || sec>59)
		return false;
	return true;
}

void Time::show_time() {
	if (is_time())
		cout << hour << ":" << minute << ":" << sec << endl;
	else
		cout << "时间非法" << endl;
}

void Time::add_a_sec() {
	++sec;
	if (sec == 60) {
		sec = 0;
		add_a_minute();
	}		
}

void Time::add_a_minute() {
	++minute;
	if (minute == 60) {
		minute = 0;
		add_an_hour();
	}
}

void Time::add_an_hour() {
	++hour;
	if (hour == 24)
		hour = 0;
}

void Time::add_secs(int n) {
	for (int i = 0; i != n; ++i)
		add_a_sec();
}

void Time::add_minutes(int n) {
	for (int i = 0; i != n; ++i)
		add_a_minute();
}

void Time::add_hours(int n) {
	for (int i = 0; i != n; ++i)
		add_an_hour();
}
add_a_sec() ,add_a_minute(),add_an_hour()三个函数十分简单,作为普通函数调用时将浪费计算机资源,可以修改为:直接定义在类内或者加inline。 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。

上述代码中,增加n秒,n分钟,n小时的函数中,采用for循环,增加了时间开销,作如下修改:
#pragma once
#ifndef TIME_H
#define TIME_H

class Time {
public:
	Time() :hour(0), minute(0), sec(0) {};
	Time(int h, int m, int s) :hour(h), minute(m), sec(s) {};
	void show_time();      //显示时间
	inline void add_a_sec();      //增加一秒钟
	inline void add_a_minute();   //增加一分钟
	inline void add_an_hour();    //增加一小时
	void add_secs(int);    //增加n秒钟
	void add_minutes(int); //增加n分钟
	void add_hours(int);   //增加n小时
private:
	int hour, minute, sec;
	bool is_time();    //判断时间是否合法
};
#endif // !TIME_H
#include<iostream>
#include"time.h"
using namespace std;

bool Time::is_time() {
	if (hour < 0 || hour>23 || minute < 0 || minute>59 || dec < 0 || sec>59)
		return false;
	return true;
}

void Time::show_time() {
	if (is_time())
		cout << hour << ":" << minute << ":" << sec << endl;
	else
		cout << "时间非法" << endl;
}

inline void Time::add_a_sec() {
	++sec;
	if (sec == 60) {
		sec = 0;
		add_a_minute();
	}		
}

inline void Time::add_a_minute() {
	++minute;
	if (minute == 60) {
		minute = 0;
		add_an_hour();
	}
}

inline void Time::add_an_hour() {
	++hour;
	if (hour == 24)
		hour = 0;
}

void Time::add_secs(int n) {
	sec += n;
	if (sec > 59) {
		add_minutes(sec/60);
		sec %= 60;
	}

}

void Time::add_minutes(int n) {
	minute += n;
	if (minute > 59) {
		add_hours(minute / 60);
		minute %= 60;
	}
}

void Time::add_hours(int n) {
	hour += n;
	if (hour > 23)
		hour %= 25;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值