一、问题及代码
设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
<ol start="1" class="dp-cpp" style="margin: 0px 0px 1px 45px !important; padding: 0px; border: none; list-style-position: initial; list-style-image: initial; color: rgb(92, 92, 92); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 35px; "><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">/* </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 文件名称: 静态成员函数的应用 </span> </span></li><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 作 者: 吴 磊 </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 完成日期:2016 年 4 月 14 日 </span> </span></li><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 版 本 号:v1.0 </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 对任务及求解方法的描述部分: </span> </span></li><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 输入描述: </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 问题描述: </span> </span></li><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 程序输出: </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 问题分析: </span> </span></li><li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">* 算法设计: </span> </span></li><li style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; "><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; "><span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; ">*/</span><span style="margin: 0px; padding: 0px; border: none; background-color: inherit; "> </span></span></li></ol>#include<iostream>
using namespace std;
class Time{
public:
Time(int=0,int=0,int=0);
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;
int u;
};
//下面写出静态成员的初始化及各成员函数的定义……
bool Time::is_24=true;
bool Time::from0=false;
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){}
void Time::show_time()
{
int v;
u=0;
if(is_24)
v=hour;
else
{
u=2;
if(hour>=12)
u=1;
v=hour%12;
}
if(from0)
{
if(v<10)
cout<<"0";
cout<<v<<":";
if(minute<10)
cout<<"0";
cout<<minute<<":";
if(sec<10)
cout<<"0";
cout<<sec;
if(u==2)
cout<<" am"<<endl;
else if(u==1)
cout<<" pm"<<endl;
else
cout<<"\n";
}
else
cout<<v<<":"<<minute<<":"<<sec<<endl;
}
void Time::add_seconds(int t)
{
sec=sec+t;
if(sec>59)
{
int q=sec/60;
add_minutes(q);
sec=sec%60;
}
}
void Time::add_minutes(int t)
{
minute=minute+t;
if(minute>59)
{
int q=minute/60;
add_hours(q);
minute=minute%60;
}
}
void Time::add_hours(int t)
{
hour=hour+t;
if(hour>23)
{
hour=hour%24;
}
}
void Time::change24()
{
is_24=!is_24;
}
void Time::changefrom0()
{
from0=!from0;
}
int main()
{
Time t1(23,14,25),t2(8,45,6);
cout<<"24时制, 不前导:"<<endl;
cout<<"t1是:";
t1.show_time();
cout<<"t2是:";
t2.show_time();
t1.add_hours(10);
t2.add_hours(10);
Time::changefrom0();
cout<<"10小时后,切换是否前导:"<<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();
return 0;
}
二、运行结果
三、心得体会
刚开始没有一点头绪,后来通过看静态函数的文件才一点一点的明白,成功是来之不易的。
四、知识总结
熟知了static和bool类型的应用,利用静态函数的调用。