不管什么样的时钟,也不管各种时钟是如何运行的,它们都具有时,分,秒三个属性。除了运行,显示时间的基本功能外,还需要设置(调整)时间,设置闹钟等功能。将时钟的这些属性抽象出来,分别给出面向过程的程序和 面向对象的程序实现对时钟的模拟。
首先先来看面向过程的时钟模拟。
#include <iostream>
using namespace std;
struct clock
{
int h;
int m;
int s;
};
clock myclock;
void settime(int h,int m,int s)
{
myclock.h = (h>=0&&h<24)?h:0;
myclock.m = (m>=0&&m<60)?m:0;
myclock.s = (s>=0&&s<60)?s:0;
}
void showtime()
{
cout<<myclock.h<<":";
cout<<myclock.m<<":";
cout<<myclock.s<<endl;
}
int main()
{
showtime();
settime(8,20,20);
showtime();
return 0;
}
运行结果
面对对象模拟时钟程序
#include <iostream>
using namespace std;
class clock
{
private:
int h;
int m;
int s;
public:
void settime(int H,int M,int S)
{
h = (H>=0&&H<24)?H:0;
m = (M>=0&&M<60)?M:0;
s = (S>=0&&S<60)?S:0;
}
void showtime()
{
cout<<h<<":";
cout<<m<<":";
cout<<s<<endl;
}
};
int main()
{
clock c;
c.showtime();
c.settime(8,20,20);
c.showtime();
return 0;
}
运行结果
通过观察上面的两个程序我们可以发现以下的几点不同。
第一,在面对过程的程序中,时钟数据用一个结构型的变量存储,对时钟数据的存取通过函数来实现,由于存储时钟数据的时一个全局变量,在任何地方都可见,可以不通过函数单独存取时钟数据,在面对对象的程序中,只能通过类提供的函数来操控时钟。
第二,在面向过程的程序中,数据与对数据的操控时相互独立的,数据作为参数通过函数传递给函数。在面向对象的程序中数据与对数据的操控构成一个整体。
第三,面向过程和面型对象的程序在初始时的值不同,这是因为在面向过程的程序中,变量时全局变量,而在面向对象的程序中变量时局部变量,全局变量和局部变量在没有进行初始化时取值的方式时不一样的,这样就造成了运行结果的不同。
在面向对象的程序中,一个以class开头的类似与结构体的结构将时钟的数据与对数据进行处理的函数包括在一起,这就是c++实现的类。