/*
* 作    者: 霍雨佳
* 完成日期:2014 年4月1日
* 版 本 号:v1.0
* 问题描述:设计含有静态数据成员和成员函数的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),sec(s) {};
void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
void add_seconds(); //增加n秒钟
void add_minutes(); //增加n分钟
void add_hours(); //增加n小时
static void change24(bool m)  //改变静态成员is_24,在12和24时制之间转换
{
is_24=m;
}
static void changefrom0(bool n)  //改变静态成员from0,切换是否前导0
{
from0=n;
}
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;
void Time::show_time( ) //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
{
if(Time::is_24)
{
cout<<"24小时制"<<" ";
cout<<hour<<":"<<minute<<":"<<sec<<endl;//24小时制
}
else if(Time::from0)//前导0
{
cout<<"12小时制且前导0:"<<" ";
if(hour<10)
cout<<"0"<<hour;
else
cout<<hour<<":";
if(minute<10)
cout<<":0"<<minute;
else
cout<<minute<<":";
if(sec<10)
cout<<":0"<<sec<<endl;
else
cout<<":"<<sec<<endl;;
}
else
{
cout<<"12小时制"<<" ";
if(hour>12)
{
hour=hour-12;
cout<<hour<<":"<<minute<<":"<<sec<<" pm"<<endl;
}
else
{
cout<<hour<<":"<<minute<<":"<<sec<<" am"<<endl;//12小时制
}
}
}
void Time::add_seconds() //增加n秒钟
{
int h=0,m=0,s=0,i,j,l,b;
/*s=sec;
m=minute;
h=hour;*/
cout<<"请输入要增加的秒数";
cin>>b;
s=s+b;
cout<<"增加"<<b<<"秒钟后时间为:"<<endl;
for(i=0; s>=60; i++)
{
if(s<60)
{
s+=1;
}
else
{
s=s-60;
if((m+1)<60)
{
m+=1;
}
else
{
for(j=0; m>=60; j++)
{
m=m-60;
if((h+1)<24)
h+=1;
else
for(l=0; h>=24; l++)
{
h=h-24;
}
}
}
}
}
hour=h;
minute=m;
sec=s;
}
void Time::add_minutes() //增加n分钟
{
int h,m,s,i,j,b;
s=sec;
m=minute;
h=hour;
cout<<"请输入要增加的分钟数";
cin>>b;
m+=b;
cout<<"增加"<<b<<"分钟后时间为:"<<endl;
if(m<60)
{
m=m;
}
else
{
for(i=1; m>=60; i++)
{
m=m-60;
if((h+1)<24)
h+=1;
else
for(j=0; h>=24; j++)
{
h=h-24;
}
}
}
hour=h;
minute=m;
sec=s;
}
void Time::add_hours() //增加n小时
{
int h,m,s,l,i;
s=sec;
m=minute;
h=hour;
cout<<"请输入要增加的小时";
cin>>l;
h=h+l;
cout<<"增加"<<l<<"小时后时间为:"<<endl;
if(h<24)
h=h;
else
{
for(i=1; h>=24; i++)
{
h=h-24;
}
}
hour=h;
minute=m;
sec=s;
}
int main()
{
Time t;
t.change24(true);
t.show_time( );
t.add_seconds(); //增加n秒钟
t.change24(false);
t.show_time( );
t.add_minutes(); //增加n分钟
t.change24(true);
t.show_time( );
t.add_hours(); //增加n小时
t.change24(false);
t.changefrom0(false);
t.show_time( );
return 0;
}

运行结果:

要好好研究下静态变量了……

6-4 静态成员应用相关推荐

  1. 为什么静态方法无法直接调用非静态成员变量和方法

    静态方法无法直接调用非静态成员变量和方法 看到这句话,要想到形容的是这样的如下 静态方法里面无法调用非静态变量 下面在写一个对比非静态的方法和静态方法调用变量对比 问题原因 静态变量和静态的方法是属于 ...

  2. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  3. c++静态成员函数好处

    静态成员函数主要为了调用方便,不需要生成对象就能调用. 比如: class X { public:void MethodA();static void MethodB(); } 此时MethodB可以 ...

  4. 谁知道静态成员的纠结心境

    我们在实际开发的过程中,可能需要某些类的成员变量并不是针对每一个对象的,而是针对每一个类而言的,比如在银行中有一个利率数据,我们希望的是,当一个利率改变的时候,所有的对象都能够看到这个改变的数据,并利 ...

  5. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  6. 友元函数、类的非静态成员函数、静态成员函数的区别

    类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...

  7. C++类的静态成员详细讲解

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  8. php面向对象静态常量,浅谈PHP面向对象编程(四、类常量和静态成员)

    4.0 类常量和静态成员 通过上几篇博客我们了解到,类在实例化对象时,该对象中的成员只被当前对象所有.如果希望在类中定义的成员被所有实例共享. 此时可以使用类常量或静态成员来实现,接下来将针对类常量和 ...

  9. C++中类的静态成员

    1.Cpp中类的静态成员 可以使用static关键字来把类成员定义为静态的.当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本.静态成员在类的所有对象中是共享的.如果不 ...

  10. Effective C# 原则13:用静态构造函数初始化类的静态成员(译)

    Effective C# 原则13:用静态构造函数初始化类的静态成员 Item 13: Initialize Static Class Members with Static Constructors ...

最新文章

  1. ipython --pandas
  2. vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...
  3. 洛谷1197星球大战
  4. -Xms -Xmx -Xmn -Xss -XX:
  5. sklearn 随机森林_初识随机森林及sklearn实现
  6. Coding: 2的N次方
  7. mysql导入存储过程报错_mysql导入建立存储过程或函数报错This function has none of DETERMINISTIC, NO SQL解决办法...
  8. 「Azure」数据分析师有理由爱Azure之二-立即申请帐号开始学习之旅
  9. JVM夺命连环10问
  10. linux系统上传下载命令rz和sz
  11. python加密解密算法_Python基于DES算法加密解密实例
  12. 63相似、合同、相抵
  13. VISIO各种图标超全(IT行业专用网络及硬件)_工业控制网络的现状
  14. 前端培训Ajax-onreadystatechange 事件
  15. SIP信令交互过程示例
  16. word论文公式加点
  17. 【数字信号处理】数字信号处理简介 ( 数字信号处理技术 | 傅里叶变换 )
  18. YIT-CTF—隐写术
  19. vue+echarts平面地图和飞线
  20. 盘点 | Github上的18个顶级深度学习项目

热门文章

  1. 郑豪7.17现货黄金下周一价格行情走势分析及开盘最新操作建议附多空单在线解套
  2. CEF3:用CEF3实现最简单的浏览器
  3. 专业创造奇迹 彩票行业进入数据分析时代
  4. 中国内地城市CA分布
  5. 舆情监测系统软件如何选择及系统作用详介
  6. 浣溪沙 2022年4月24日
  7. 手机web端唤醒qq客户端以及电脑web端唤醒qq客户端
  8. sanity check
  9. 华硕ASUS B250M PLUS+i5 7500+核显+macos12.0+opencore0.7.2
  10. 周总结2020-2-16