第五周上机实践项目4-静态成员应用

本文详细介绍了如何设计一个包含静态数据成员和成员函数的Time类,用于实现不同时间制式的显示和操作,包括12小时制与24小时制的切换,以及是否前导0的设置。通过静态成员函数`change24()`和`changefrom0()`实现了时间制式的动态调整,同时提供了增加秒数、分钟数和小时数的方法。

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

/*
 *Copyright(c)2014,烟台大学计算机学院
 *All rights reserved.
 *文件名称:test.cpp
 *作者:满星辰
 *完成日期:2015年 4月 7日
 *版本号:v1.0
 *问题描述:设计含有静态数据成员和成员函数的Time类。
            静态数据成员是类中所有的对象共有的数据,
            在下面的设计中,时钟要采用12小时制,还是要使用24小时制,
            显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
 *输入描述:
 *程序输出:
 */
#include <iostream>
#include <iomanip>
#include <cmath>
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
    {
        int h;
        h=(is_24)?hour:(hour%12);
        if(!from0)
            cout<<h<<":"<<minute<<":"<<sec;
        else
        {
            cout<<setw(2)<<setfill('0')<<h<<":";
            cout<<setw(2)<<setfill('0')<<minute<<":";
            cout<<setw(2)<<setfill('0')<<sec;
        }
        if(!is_24)
            cout<<((hour>12)?" p.m.":" a.m.");
        cout<<endl;
    }
    void add_seconds(int n) //增加n秒钟
    {
        sec+=n;
        add_seconds(sec/60);
        sec=sec%60;
    }
    void add_minutes(int n) //增加n分钟
    {
        minute+=n;
        add_minutes(minute/60);
        minute=minute%60;
    }
    void add_hours(int n) //增加n小时
    {
        hour+=n;
        hour%=24;
    }
    static void change24()  //改变静态成员is_24,在12和24时制之间转换
    {
        is_24=!is_24;
    }
    static void changefrom0()  //改变静态成员from0,切换是否前导0
    {
        from0=!from0;
    }
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=true;
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;
}

图片:


心得:

由于项目二用了一次(XX)?X:X  自我赶脚良好~喜欢这种简洁的画风,会逐渐更改我的风格。
成功忘记给static赋初值=  ,=牢记要在类外赋值!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值