87C面向对象程序设计举例
这里我们将通过几个简单的例子来演示如何站在面向对象的角度设计程序,以及使用类的好处。 【例8.1]最简单的例子。 include iostream using namespace std; class Time 〃定义 Time 类 { public 〃数据成员为公用的 int hour; int minute; int sec; ); int main() ( Time tl;〃定义tl为Time类对象 cin tl.hour;〃输入设定的时间 cintl.minute; cintl.sec; 〃输出时间 cout tl.hour tl.minute tl.secendl; return 0; } 运行情况如下 1232 43 / 123243 几点注意 1)在引用数据成员hour, minute , sec时不要忘记在前面指定对象名。 2)不要错写为类名,如写成 Time.hour,Time.minute,Time.sec 是不对的。因为类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体, 是占存储空间的,其数据成员是有值的,可以被引用的。 3)如果删去主函数的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。 【例8.2】引用多个对象的成员。 1)程序(a) include iostream using namespace std; class Time public int hour; int minute; int sec; ; int main Timetl;//定义对象tl cintl.hour;//向tl的数据成员输入数据 cintl.minute; cintl.sec; cout tl.hour tl.minute tl.sec endl;//0y出 tl 中数据成员的值 Timet2;〃定义对象t2 cint2.hour;//向t2的数据成员输入数据 cint2.minute; cint2.sec; cout t2.hour t2.minute t2.sec vendl;//输出 t2 中数据成员的值 return 0; } 运行情况如下 1032 43 / 103243 22 32 43 / 223243 程序是清晰易懂的,但是在主函数中对不同的对象一写出有关操作,会使程序冗长。为了解决这个问题, 可以使用函数来进行输入和输出。见程序b。 2 程序b include iostream using namespace std; class Time public int hour; int minute; int sec; ; int main void set_timeTime;//函数声明 void show_timeTime;//函数声明 Time tl;〃定义tl为Time类对象 set_timetl;〃调用setjime函数,向tl对象中的数据成员输入数据 show_timetl;〃调用show_time函数,输出tl对象中的数据 Time t2;〃定义t2为Time类对象 set_timet2;〃调用setjime函数,向t2对象中的数据成员输入数据 show_timet2;〃调用show_time函数,输出t2对象中的数据 return 0; } void set_timeTime t //定义函数set_time ,形参t是引用变量 cin t.hour;〃输入设定的时间 cint.minute; cint.sec; void show_timeTime t //定义函数 show_time ,形参 t 是引用变量 cout t.hour t.minute t.sec vendl; 〃输出对象中的数据 } 运行情况与程序a相同。 3 程序c 可以对上面的程序作一些修改,数据成员的值不再由键盘输入,而在调用函数时由实参给出,并在函数中 使用默认参数。将程序b第8行以下部分改为 int main void set_timeTime,int hour0,int minute0,int sec0;//函数声明 void show_timeTime;//函数声明 Time tl; set_timetl,12,23,34;〃通过实参传递时、分、秒的值 show_timetl; Time t2; set_timet2;〃使用默认的时、分、秒的值 show_timet2; return 0; } void set_timeTime t,int houcint minute,int sec t.hour 二 hour; t.minuteminute; t.secsec; } void show_timeTime t { cout t.hour t.minute t.secendl; } 程序运行时的输出为 122334 tl中的时、分、秒 000 t2中的时、分、秒 以上两个程序中定义的类都只有数据成员,没有成员函数,这显然没有体现出使用类的优越性。在下面的 例子中,类体中就包含了成员函数。 [例8.3】将例8.2的程序改用含成员函数的类来处理。 include iostream using namespace std; class Time public void set_time;〃公用成员函数 void show_time;//公用成员函数 private 〃数据成员为私有 int hour; int minute; int sec; ; int main Time tl;〃定义对象tl tl.set_time;//调用对象tl的成员函数set_time ,向tl的数据成员输入数据 tl.show_time;〃调用对象tl的成员函数showjime ,输出tl的数据成员的值 Timet2;〃定义对象t2 t2.set_time;//调用对象t2的成员函数set_time ,向t2的数据成员输入数据 t2.show_time;〃调用对象t2的成员函数showjime ,输出t2的数据成员的值 return 0; void Timeset_time 〃在类外定义 set_time 函数 cin hour; cin minute; cinsec; }