第七周实验报告(一)含有静态数据成员和成员函数的TIME类

这篇博客介绍了作者在实现含有静态数据成员和成员函数的TIME类过程中遇到的挑战,特别是对静态成员的理解和使用。通过实践,作者深化了对布尔类型静态成员的赋值及静态成员改变的理解。此外,文章还提到了在设置前导0时,从老雷的博文中学习到的简便方法setw(2) << setfill('0')。
摘要由CSDN通过智能技术生成
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:含有静态数据成员和成员函数的TIME类。 
* 作    者:         晁阳                       
* 完成日期:     2012    年4      月    2   日
* 版 本 号:       t1.0  
* 对任务及求解方法的描述部分
* 输入描述: 
* 问题描述: 
* 程序输出: 

* 程序头部的注释结束

*/

#include <iostream>

#include < iomanip >

using namespace std;

class Time
{
public:
	Time(int h = 0,int m = 0,int s = 0): hour(h),minute(m),sec(s){}
	void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
	void add_seconds(int); //增加n秒钟
	void add_minutes(int); //增加n分钟  
	void add_hours(int); //增加n小时  
	static void change24();  //改变静态成员is_24,在12和24时制之间转换
	static void changefrom0();   //改变静态成员from0,切换是否前导0
private:
	static bool is_24; //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5 pm 
	static bool from0; //为true时,前导0,8:23:5显示为08:23:05
	int hour;
	int minute;
	int sec;
};
bool Time::from0 = false;

bool Time::is_24 = true;

void Time::show_time()
{
	if(is_24 && !from0)//24小时,不前导0
	{cout << " " <<hour<<":"<<minute<<":"<<sec<<endl;}
	if(is_24 && from0)//24小时,前导0
	{cout <<setw(2)<< setfill('0') <<hour<<':'<<setw(2)<< setfill('0') << minute<<':'<<setw(2)<< setfill('0') <<sec<<endl ;}
	if ( !is_24 )
	{
		if ( hour > 12 )
		{cout <<setw(2)<< setfill('0') <<hour - 12<<':'<<setw(2)<< setfill('0') << minute<<':'<<setw(2)<< setfill('0') <<sec<<"pm"<<endl;}
		else {
	   cout <<setw(2)<< setfill('0') <<hour<<':'<<setw(2)<< setfill('0') << minute<<':'<<setw(2)<< setfill('0') <<sec<<"am"<<endl;
		}
	}
	
	
}

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

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

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

void Time :: change24()  //改变静态成员is_24,在12和24时制之间转换
{  
    is_24 = false;  
}  
  
void Time :: changefrom0()  //改变静态成员from0,切换是否前导0
{  
    from0 = true;  
}  
	
int main( )   
{
	Time t1(23,14,25),t2(8,45,6);

	cout<<"24时制, 不前导0:"<<endl;

	cout<<"t1是:";

	t1.show_time();

	cout<<"t2是:";

	t2.show_time();

	t1.add_hours(10);

	t2.add_hours(10);

	Time::changefrom0(); //注意此处调用静态成员

	cout<<"10小时后, 切换是否前导0:"<<endl;

	cout<<"t1是:";

	t1.show_time();

	cout<<"t2是:";

	t2.show_time();

	t1.change24();

	cout<<"换一种制式:"<<endl;

	cout<<"t1是:";

	t1.show_time();

	cout<<"t2是:";

	t2.show_time();

	system("pause");

	return 0;
}


感言:这个类中加秒加分钟都是以前写过的函数,但是在对静态成员进行赋值的时候还是对布尔类型不熟悉啊,对静态成员进行改变的时候又有点绕啦! 设置前导0时看到老雷发的博文,上面提供了很多种处理方式,看看他的修改版和其他同学的处理方式发现还是setw(2)<< setfill('0')更加简洁易懂,(*^__^*) 嘻嘻……又学了一招!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
time含有静态数据成员来存储关于时间的共享信息,比如全球统一时间(GMT)。静态数据成员的所有对象中是共享的,只有一个副本存在于内存中。 一个适用的静态数据成员可以是一个GMT偏移量,以便在函数中通过调用该变量获取当前时间的具体值。这个静态数据成员可以在时间的构造函数中初始化,并通过名访问。 除了静态数据成员time也应该包含可以操作时间的成员函数。这些成员函数可以完成一些常见的时间操作,比如设置时间、增加时间、减少时间、获取小时、分钟和秒等等。这些成员函数可以通过对象名来调用,因为它们是属于该对象的。 除了上述的基本成员函数之外,也可以定义一些静态成员函数。这些静态成员函数可以在不创建对象的情况下调用,因为它们与对象无关。例如,可以定义一个静态成员函数来获取当前时间,并通过名来调用。 在设计time时,请确保静态数据成员成员函数的访问权限受到限制,以保证数据的安全和封装性。静态数据成员成员函数应该遵循便于维护和使用的规则,以提高代码的可读性和可维护性。它们应该被正确地初始化并在正确的时候进行清理,以避免内存泄漏或未定义行为。 总之,静态数据成员成员函数time提供了一种在的所有对象之间共享信息的方式,以及在不创建对象的情况下操作时间的能力。这些元素可以提高的灵活性和功能性,并促使代码更加简洁和高效。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值