静态成员应用

输入代码:

/*
 * Copyright (c) 2014, 烟台大学计算机学院
 * All rights reserved.
 * 文件名称:sum123.cpp
 * 作    者:林海云
 * 完成日期:2015年4月8日
 * 版 本 号:v2.0
 *
 * 问题描述: 设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有
              的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用
            24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的
          设置,适合作为类中的静态数据成员

 * 输入描述:无
 * 程序输出:按要求输出
 */
#include <iostream>
using namespace std;
class Time
{
public:
    Time (int=0,int=0,int=0);
    void show_time( );
    void add_seconds(int);      //增加n秒钟
    void add_minutes(int);      //增加n分钟
    void add_hours(int);         //增加n小时
    static void change24();     //改变改变静态成员is_24,在12和24时制之间转换
    static void changefromo();  //改变静态成员from0,切换是否前导0
private:
    static bool is_24;          //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5pm
    static bool fromo;          //为true时,前导0,8:23:5显示为08:23:05
    int hour;
    int minute;
    int sec;

};
bool Time::is_24=true;
bool Time::fromo=false;
Time::Time (int h,int m,int s)
{
    hour=h;
    minute=m;
    sec=s;
}
void Time::show_time( )
{
    int h;
    if(is_24)
        h=hour;
    else
        h=hour%12;
    if(h<10&&fromo)
        cout<<'0';
    cout<<h<<':';
    if(minute<10&&fromo)
        cout<<'0';
    cout<<minute<<':';
    if(sec<10&&fromo)
        cout<<'0';
    cout<<sec;
    if(!is_24)
    {
        if(hour<=12)
            cout<<" am ";
        else
            cout<<"  pm  ";
    }
    cout<<endl;
}
void Time::add_seconds(int n)
{
    sec+=n;
    if(sec>60)
    {
        add_minutes(sec/60);
        sec=sec%60;
    }
}
void Time::add_minutes(int n)
{
    minute+=n;
    if(minute>60)
    {
        add_hours(minute/60);
        minute=minute%60;
    }
}
void Time::add_hours(int n)
{
    hour+=n;
    if(hour>23)
        hour=hour%24;
}
void Time::change24()
{
    is_24=!is_24;
}
void Time::changefromo()
{
    fromo=!fromo;
}
int main()
{
    Time t1(23,14,25),t2(8,45,6);
    cout<<"24小时制,不前导0:"<<endl;
    cout<<"t1是:";
    t1.show_time();
    cout<<"t2是:";
    t2.show_time();
    cout<<"10小时后,切换是否前导0:"<<endl;
    t1.add_hours(10);
    t2.add_hours(10);
    t1.changefromo();
    cout<<"t1是:";
    t1.show_time();
    cout<<"t2是:";
    t2.show_time();
    cout<<"换一种制式:"<<endl;
    t1.change24();
    //t2.change24();
    cout<<"t1是:";
    t1.show_time();
    cout<<"t2是:";
    t2.show_time();
    cout<<"请按任意键继续。。。"<<endl;
    return 0;
}

运行结果:

时间: 2025-01-03 02:47:28

静态成员应用的相关文章

类静态成员(难点)

一.类静态数据成员 静态成员的提出是为了解决数据共享的问题.实现共享有许多方法,如:设置全局性的变量或对象是一种方法.但是,全局变量或对象是有局限性的.这里主要讨论用类的静态成员来实现对象间的数据的共享. 静态数据成员的使用方法和注意事项如下: 1.静态数据成员在定义或说明时前面加关键字static. 2.静态成员初始化与一般数据成员初始化不同.静态数据成员初始化的格式如下: <数据类型><类名>::<静态数据成员名>=<值> 3.静态数据成员是静态存储的,

C++静态成员变量需注意的问题

1.在类的内部仅仅进行声明 为什么? 因为如果这样的话,每构造一个对象就要进行一次初始化,而这样就不能达到类共享的目的. 2.在类的外部要进行初始化 为什么? 因为在类的仅仅进行了声明(编译器会这样认为),没有分配存储空间,在类外进行初始化话,是为了分配存储空间. 3.初始化时不加static 示例 #include "stdafx.h" #include <iostream> using namespace std; class A { public: static in

C++程序设计方法3:类中的静态成员

在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为"类的变量" 静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置) 静态数据要在实现文件中赋初值,格式为: Type ClassName::static_var = Value; 返回值类型前面加static修饰的成员函数,称为静态成员函数,它们不能调用非静态成员函数: 类的静态成员(数据,函数)既可以通过对象来访问,也可以通过类名字类访问: #include <io

成员函数指针和指向静态成员函数的指针

#include <iostream> using namespace std; class Student{ public:     Student(const string& name):m_name(name){}     void who(void){         cout << m_name << endl;     }     string m_name;     static int s_add(int a,int b){         re

C++中类的静态成员初始化

静态成员的初始化: 与全局对象一样对于静态数据成员在程序中也只能提供一个定义,这意味着静态数据成员的初始化不应该被放在头文件中而应该放在含有类的非inline函数定义的文件中. 转自:http://blog.csdn.net/veryday_code/article/details/7921833 能在类中初始化的成员只有一种,那就是静态常量成员. class A { private: static const int count = 0; // 静态常量成员可以在类内初始化 }; 结论: 静态

c++静态成员与静态函数

1 静态成员的定义 1 静态变量 c++在类里面进行的仅是引用性声明,不会为之分配内存,要求必须单独对静态数据成员进行定义性的声明.形式为: 类型 类名::静态数据成员名: 此时的定义需要再加关键字static,并且可以在定义时初始化. c++要求类中成员变量不可以直接初始化,可以采用定义函数方法时后挂变量方式初始化. 这与Java不同. 2 静态函数 定义方式与静态变量同.函数的定义可以在类内也可以在类外. class A { public: A(int y) { a=y; cout<<a+

静态成员函数不能采用const修饰的原因

静态成员函数不能用const修饰 ,也不能存取nonstatic数据 C++中静态成员函数不能用const修饰的原因: static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因:一个静态成员函数访问的值是其参数.静态数据成员和全局变量,而这些数据都不是对象状态的一部分.而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员.既然一个静态成员函

C++里的静态成员函数不能用const的原因

From http://blog.csdn.net/freeboy1015/article/details/7634950 static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因: 这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规

C++模板 静态成员 定义(实例化)

问一个问题: 考虑一个模板: template <typename T> class Test{ public: static std::string info; }; 对于下面若干种定义方式.哪些是对的(通过编译)? template <> string Test<int>::info("123"); template <typename T> string Test<T>::info("123"); t

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静