C++实验3-类和对象2
2016-04-08 10:44
381 查看
一、问题及代码
二、运行结果
三、心得体会
设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
四、知识点总结
静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 其定义方式与全局变量相同。静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问
/* * 文件名称:静态成员类 * 作 者:尚超 * 完成日期:2016年4月8日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: * 输入描述: * 问题描述:设计含有静态数据成员和成员函数的Time类 * 程序输出: 略 * 问题分析: 略 * 算法设计: 略 */
#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小时 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 = false; void Time::show_time( ) { if (is_24) { if (from0) { cout << (hour < 10 ? "0":"") << hour << ':' << (minute < 10 ? "0":"") << minute << ':' << (sec < 10 ? "0":"") << sec << endl; } else { cout << hour << ':' << minute << ':' << sec << endl; } } else { if (from0) { cout << (hour < 10||(hour - 12 >=0 && hour - 12 < 10) ? "0":"") << (hour > 12 ? hour-12 : hour) << ':' << (minute < 10 ? "0":"") << minute << ':' << (sec < 10 ? "0":"") << sec << ' ' << (hour > 11 ? "pm" : "am") << endl; } else { cout << (hour > 12 ? hour-12 : hour) << ':'<< minute<< ':' << sec << ' ' << (hour > 11 ? "pm" : "am") << endl; } } } void Time::add_seconds(int s) { s = sec + s; sec = s % 60; add_minutes(s / 60); } void Time::add_minutes(int m) { m = minute + m; minute = m % 60; add_hours(m / 60); } void Time::add_hours(int h) { h = hour + h; hour = h % 24; } void Time::change24() { is_24 = !is_24; if (is_24) cout << "已切换为24小时制。" << endl; else cout << "已切换为12小时制。" << endl; } void Time::changefrom0() { from0 = !from0; if (from0) cout << "已切换为前导0输出。" << endl; else cout << "已切换为非前导0输出。" << endl; } 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(); t1.add_hours(10); t2.add_hours(10); Time::changefrom0(); cout << "10小时后, 切换是否前导0:" << 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(); system("pause"); return 0; }
二、运行结果
三、心得体会
设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
四、知识点总结
静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 其定义方式与全局变量相同。静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问