C++⾯向对象程序设计举例
【例8.1】最简单的例⼦。
#include <iostream>
using namespace std;
class Time //定义Time类
{
public : //数据成员为公⽤的
int hour;
int minute;
int sec;
};
int main( )
{
Time t1;//定义t1为Time类对象
cin>>t1.hour;//输⼊设定的时间
cin>>t1.minute;
cin>>t1.sec;
//输出时间:
cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;
return0;
}
运⾏情况如下:
1232 43↙
12:32:43
⼏点注意:
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( )
{
Time t1;//定义对象t1
cin>>t1.hour;//向t1的数据成员输⼊数据
cin>>t1.minute;
cin>>t1.sec;
cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;//输出t1中数据成员的值
Time t2;//定义对象t2
cin>>t2.hour;//向t2的数据成员输⼊数据
cin>>t2.minute;
cin>>t2.sec;
cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl;//输出t2中数据成员的值
return0;
}
运⾏情况如下:
1032 43↙
10:32:43
22 32 43↙
22:32:43
程序是清晰易懂的,但是在主函数中对不同的对象⼀⼀写出有关操作,会使程序冗长。为了解决这个问题,可以使⽤函数来进⾏输⼊和输出。见程序(b)。
2)程序(b)
#include <iostream>
using namespace std;
class Time
{
public :
int hour;
int minute;
int sec;
};
int main( )
{
void set_time(Time&);//函数声明
void show_time(Time&);//函数声明
Time t1;//定义t1为Time类对象
set_time(t1);//调⽤set_time函数,向t1对象中的数据成员输⼊数据
show_time(t1);//调⽤show_time函数,输出t1对象中的数据
Time t2;//定义t2为Time类对象
set_time(t2);//调⽤set_time函数,向t2对象中的数据成员输⼊数据
show_time(t2);//调⽤show_time函数,输出t2对象中的数据
return0;
}
void set_time(Time& t) //定义函数set_time,形参t是引⽤变量
{
cin>>t.hour;//输⼊设定的时间
cin>>t.minute;
cin>>t.sec;
}
void show_time(Time& t) //定义函数show_time,形参t是引⽤变量
{
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;//输出对象中的数据
}
运⾏情况与程序(a)相同。
3) 程序(c)
可以对上⾯的程序作⼀些修改,数据成员的值不再由键盘输⼊,⽽在调⽤函数时由实参给出,并在函数中使⽤默认参数。将程序(b)第8⾏以下部分改为:
int main( )
{
void set_time(Time&,int hour=0,int minute=0,int sec=0);//函数声明
void show_time(Time&);//函数声明
Time t1;
set_time(t1,12,23,34);//通过实参传递时、分、秒的值
show_time(t1);
Time t2;
set_time(t2);//使⽤默认的时、分、秒的值
show_time(t2);
return0;
}
void set_time(Time& t,int hour,int minute,int sec)
t.hour=hour;
t.minute=minute;
t.sec=sec;
}
void show_time(Time& t)
{
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
程序运⾏时的输出为:
12:23:34 (t1中的时、分、秒)
0:0:0 (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 t1;//定义对象t1
t1.set_time( );//调⽤对象t1的成员函数set_time,向t1的数据成员输⼊数据
t1.show_time( );//调⽤对象t1的成员函数show_time,输出t1的数据成员的值
Time t2;//定义对象t2
t2.set_time( );//调⽤对象t2的成员函数set_time,向t2的数据成员输⼊数据
t2.show_time( );//调⽤对象t2的成员函数show_time,输出t2的数据成员的值
return0;
}
void Time::set_time( ) //在类外定义set_time函数
{
cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time( ) //在类外定义show_time函数
{
cout<< hour<<":"<< minute<<":"<< sec<< endl;
}
运⾏情况与例8.2中的程序(a)相同。
⼏点注意:
在主函数中调⽤两个成员函数时,应指明对象名(t1,t2)。表⽰调⽤的是哪⼀个对象的成员函数。
在类外定义函数时,应指明函数的作⽤域(如void Time∷set_time( ))。在成员函数引⽤本对象的数据成员时,只需直接写数据成员名,这时C++系统会把它默认为本对象的数据成员。也可以显式地写出类名并使⽤域运算符。
应注意区分什么场合⽤域运算符“∷”,什么场合⽤成员运算符“.”,不要搞混。什么是编程举个例子
【例8.4】出⼀个整型数组中的元素的最⼤值。这个问题可以不⽤类的⽅法来解决,现在⽤类来处理,读者可以⽐较不同⽅法的特点。
#include <iostream>
using namespace std;
class Array_max //声明类
{
public : //以下3⾏为成员函数原型声明
void set_value( ); //对数组元素设置值
void max_value( ); //出数组中的最⼤元素
void show_value( ); //输出最⼤值
private :
int array[10]; //整型数组
int max; //max⽤来存放最⼤值
};
void Array_max::set_value( ) //成员函数定义,向数组元素输⼊数值
{
int i;
for (i=0;i<10;i++)
cin>> array[i];
}
void Array_max::max_value( ) //成员函数定义,数组元素中的最⼤值
{
int i;
max=array[0];
for (i=1;i<10;i++)
if(array[i]> max) max=array[i];
}
void Array_max::show_value( ) //成员函数定义,输出最⼤值
{
cout<< "max="<< max;
}
int main( )
{
Array_max arrmax; //定义对象arrmax
arrmax.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个元素中的最⼤值)
请注意成员函数定义与调⽤成员函数的关系,定义成员函数只是设计了⼀组操作代码,并未实际执⾏,只有在被调⽤时才真正地执⾏这⼀组操作。
可以看出:主函数很简单,语句很少,只是调⽤有关对象的成员函数,去完成相应的操作。在⼤多数情况下,主函数中甚⾄不出现控制结构(判断结构和循环结构),⽽在成员函数中使⽤控制结构。在⾯向对象的程序设计中,最关键的⼯作是类的设计。所有的数据和对数据的操作都体现在类中。只要把类定义好,编写程序的⼯作就显得很简单了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论