标签:
【项目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