类和对象( 四 )

运行情况与程式(a)相同 。(3) 程式(c)可以对上面的程式作一些修改,数据成员的值不再由键盘输入,而在调用函式时由实参给出,并在函式中使用默认参数 。将程式(b)第8行以下部分改为intmain(){voidset_time(Time&,inthour=0,intminute=0,intsec=0);//函式声明voidshow_time(Time&);//函式声明Timet1;set_time(t1,12,23,34);//通过实参传递时、分、秒的值show_time(t1);Timet2;set_time(t2);//使用默认的时、分、秒的值show_time(t2);return0;}voidset_time(Time&t,inthour,intminute,intsec){t.hour=hour;t.minute=minute;t.sec=sec;}voidshow_time(Time&t){cout<<t.hour<<″:″<<t.minute<<″:″<<t.sec<<endl;}程式运行时的输出为12:23:34 (t1中的时、分、秒)0:0:0 (t2中的时、分、秒)以上两个程式中定义的类都只有数据成员,没有成员函式,这显然没有体现出使用类的优越性 。在下面的例子中,类体中就包含了成员函式 。例3将例2的程式改用含成员函式的类来处理 。#include<iostream>usingnamespacestd;classTime{public:voidset_time();//公用成员函式voidshow_time();//公用成员函式private://数据成员为私有inthour;intminute;intsec;};intmain(){Timet1;//定义对象t1t1.set_time();//调用对象t1的成员函式set_time,向t1的数据成员输入数据t1.show_time();//调用对象t1的成员函式show_time,输出t1的数据成员的值Timet2;//定义对象t2t2.set_time();//调用对象t2的成员函式set_time,向t2的数据成员输入数据t2.show_time();//调用对象t2的成员函式show_time,输出t2的数据成员的值return0;}voidTime∷set_time()//在类外定义set_time函式{cin>>hour;cin>>minute;cin>>sec;}voidTime∷show_time()//在类外定义show_time函式{cout<<hour<<″:″<<minute<<″:″<<sec<<endl;}运行情况与例2中的程式(a)相同 。注意:(1) 在主函式中调用两个成员函式时,应指明对象名(t1,t2) 。表示调用的是哪一个对象的成员函式 。(2) 在类外定义函式时,应指明函式的作用域(如void Time∷set_time( )) 。在成员函式引用本对象的数据成员时,只需直接写数据成员名,这时C++系统会把它默认为本对象的数据成员 。也可以显式地写出类名并使用域运算符 。(3) 应注意区分什幺场合用域运算符“∷”,什幺场合用成员运算符“.”,不要搞混 。例4找出一个整型数组中的元素的最大值 。这个问题可以不用类的方法来解决,用类来处理,读者可以比较不同方法的特点 。#include<iostream>usingnamespacestd;classArray_max//声明类{public://以下3行为成员函式原型声明voidset_value();//对数组元素设定值voidmax_value();//找出数组中的最大元素voidshow_value();//输出最大值private:intarray[10];//整型数组intmax;//max用来存放最大值};voidArray_max∷set_value()//成员函式定义,向数组元素输入数值{inti;for(i=0;i<10;i++)cin>>array[i];}voidArray_max∷max_value()//成员函式定义,找数组元素中的最大值{inti;max=array[0];for(i=1;i<10;i++)if(array[i]>max)max=array[i];}voidArray_max∷show_value()//成员函式定义,输出最大值{cout<<″max=″<<max;}intmain(){Array_maxarrmax;//定义对象arrmaxarrmax.set_value();//调用arrmax的set_value函式,向数组元素输入数值arrmax.max_value();//调用arrmax的max_value函式,找出数组元素中的最大值arrmax.show_value();//调用arrmax的show_value函式,输出数组元素中的最大值return0;}运行结果如下:12 12 39 -34 17 134 045 -91 76↙ (输入10个元素的值)max=134 (输入10个元素中的最大值)请注意成员函式定义与调用成员函式的关係,定义成员函式只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地执行这一组操作 。可以看出: 主函式很简单,语句很少,只是调用有关对象的成员函式,去完成相应的操作 。在大多数情况下,主函式中甚至不出现控制结构(判断结构和循环结构),而在成员函式中使用控制结构 。在面向对象的程式设计中,最关键的工作是类的设计 。所有的数据和对数据的操作都体现在类中 。只要把类定义好,编写程式的工作就显得很简单了 。