标签:
【项目4-静态成员应用】
设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
[参考解答]
#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小时
void change();
void work();
void add_time();
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::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( ) //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
{
change();
int h=(is_24)?hour:hour%12;
cout<<h<<":";
if(minute<10&&from0)cout<<"0";
cout<<minute<<":";
if(sec<10&&from0)cout<<"0";
cout<<sec;
if(!is_24)
cout<<((hour>12)? " pm":" am");
cout<<endl;
work();
}
//这一部分值得我们好好学习一下这样的写法。
void Time::add_seconds(int n) //增加n秒钟
{
sec+=n;
if (sec>59)
{
add_minutes(sec/60);
sec%=60;
}
}
void Time::add_minutes(int n) //增加n分钟
{
minute+=n;
if (minute>59)
{
add_hours(minute/60);
minute%=60;
}
}
void Time::add_hours(int n) //增加n小时
{
hour+=n;
if (hour>23)
hour%=24;
}
void Time::change()
{
cout<<"请选择你要输出的格式。"<<endl;
cout<<"是否为24小时制(Y/N):";
char ch;
cin>>ch;
is_24=(ch=='Y'?true:false);
cout<<"是否为前导‘0’(Y/N):";
char n;
cin>>n;
from0=(n=='Y'?true:false);
}
void Time::add_time()
{
cout<<"秒钟增加的时间:";
int s;
cin>>s;
add_seconds(s);
cout<<"分钟增加的时间:";
int m;
cin>>m;
add_minutes(m);
cout<<"时钟增加的时间:";
int h;
cin>>h;
add_hours(h);
work();
}
void Time::work()
{
cout<<"有以下功能供您选择:"<<endl;
cout<<"1. 增加时间 2. 输出时间 "<<endl;
int x;
while(cin>>x)
{
switch(x)
{
case 1:
add_time();
break;
case 2:
show_time();
break;
}
}
}
int main()
{
int h,m,s;
cin>>h>>m>>s;
Time t1(h,m,s);
t1.show_time();
t1.work();
return 0;
}
在这个程序中实现了人与程序的交流。
标签:
原文地址:http://blog.csdn.net/wh201458501106/article/details/44992857