第五周项目4-静态成员应用

设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。

/*
* Copyright (c) 2015,烟台大学计算机学院
* All right reserved.
* 作者:邵帅
* 文件:Demo.cpp
* 完成时间:2015年04月08日
* 版本号:v1.0
*/
#include <iostream>
#include <cmath>
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;
};
Time::Time(int h,int m,int s): hour(h), minute(m), sec(s) {};
bool Time::is_24=true;
bool Time::from0=true;
void Time::show_time()
{
    int h=(is_24)?hour:hour%12;
    if (h<10&&from0) cout<<'0';
    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;
}
void Time::add_seconds(int s)
{
    while (s--)
    {
        sec++;
        if (sec>60)
        {
            minute++;
            sec=1;
        }
        if (minute>60)
        {
            hour++;
            minute=1;
        }
    }
}
void Time::add_minutes(int m)
{
    while(m--)
    {
        minute++;
        if (minute>60)
        {
            hour++;
            minute=1;
        }
    }
}
void Time::add_hours(int h)
{
    while(h--)
    {
        hour++;
        if (hour>23)
            hour=0;
    }
}
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;
}

运行结果:

@ Mayuko

时间: 2025-01-12 20:37:19

第五周项目4-静态成员应用的相关文章

第五周项目四 静态成员应用

[项目4-静态成员应用] 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. [cpp] view plaincopyprint? class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //根据is_24和from0,输出适合形式-2

第五周项目四 -静态成员应用 由老师版本的完善版

[项目4-静态成员应用] 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. [cpp] view plaincopyprint? class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //根据is_24和from0,输出适合形式-2

第五周 项目四-静态成员应用

问题 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. 代码: #include <iostream> using namespace std; class Time{ public: Time(int h=0,int m=0,int s=0):hour(h),minute(m),second

HeyWeGo第五周项目总结

HeyWeGo第五周项目总结 项目内容 使用java程序开发一款扫雷游戏 游戏项目规划: 确定游戏中方块格子的个数 确定游戏中地雷的个数(初始10个),完成布雷 计算每个方块周围的雷数,在方块周围本身没有地雷的情况下,统计周围地雷的个数 若周围没有地雷则翻开周围的空白方格,直到周围有附近地雷的格子 设计一个检测是否挖完所有的雷的方法 设定左键点击为翻开 设定右键点开为标记 项目进展 整合并调试修改各队员分段编写的代码,游戏已实现,已经修补上周不能右键标记部分. 完整代码 import java.

十五周 项目1 工资数据的输入

/* 输入员工工资1000-10000之间,并按从大到小输出*/ #include <iostream> using namespace std; int main( ) { double salarys[500]; int n=0; double t; while(cin>>salarys[n]) { n++; //从cin流读取数据 } //将n名职工的工资排序后输出 for(int i=0; i<n; i++) for(int j=0; j<n-1; j++) {

第五周项目2-对象作为数据成员

回想Engineer类的数据成员,有眼镜.背包等.某Engineer的眼镜.背包,是Glass.Bag类的对象.类中的数据成员,其类型可以是简单类型,也可以是类.通过这种方式,将某些类组合到另外的类中,当作其中的一个"部件"使用. 本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点.利用设计的三角形类,输入三角形的三个顶点,求出其面积.周长,并判断其是否为直角三角形和等腰三角形. 提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类:(2

第五周项目3-用多文件组织多个类的程序

将项目2用"一个项目多个文件"的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件.体会这样安排的优点. class.h #ifndef CLASS_H_INCLUDED #define CLASS_H_INCLUDED class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0); double

第五周 项目二-对象作为数据成员

问题 回想Engineer类的数据成员,有眼镜.背包等.某Engineer的眼镜.背包,是Glass.Bag类的对象.类中的数据成员,其类型可以是简单类型,也可以是类.通过这种方式,将某些类组合到另外的类中,当作其中的一个"部件"使用. 本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点.利用设计的三角形类,输入三角形的三个顶点,求出其面积.周长,并判断其是否为直角三角形和等腰三角形. 提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类

第五周项目1-体验常成员函数

设计平面坐标点类,计算两点之间距离.到原点距离.关于坐标轴和原点的对称点等.在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年04月08日 * 版本号:v1.0 */ #include <iostream> #include <