C 实例教学(类的应用-02)

2008-02-23 05:34:45来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

9.2 职员档案管理程式
是这一个简化了的雇员档案管理程式。其中把雇员的档案数据和对这些数据的配置、修改、删除等操作组成一个程式模块。程式通过这个模块----类的公有部分对档案数据进行处理,实现了面向对象程式设计的“封装”功能。
// program 6_2.cpp
#include<iostream.h>
#include<string.h>
class employee{
char *name; // 雇员姓名
short age; // 年龄
float salary; // 工资
public:
employee();
void set_name(char *);
void set_age(short a){age=a;}
void set_salary(float s){salary=s;}
void print();
~employee(){delete[]name;}
};
employee::employee()
{
name=0;
age=0;
salary=0.0;
}
void employee::set_name(char *n)
{
name=new char[strlen(n) 1];
strcpy(name,n);
}
void employee::print()
{
cout<<"Name: "<<name;
cout<<"Age: "<<age;
cout<<"Salary: "<<salary<<endl;
}
void main()
{
char *na=0;
short ag=0;
float sa=0;
na=new char[10];
employee emp[5];
for(int i=0;i<5;i )
{
cin>>na;
cin>>ag;
cin>>sa;
emp[i].set_name(na);
emp[i].set_age(ag);
emp[i].set_salary(sa);
emp[i].print();
}
emp[3].set_salary(5100.0);
emp[3].print();
emp[1].~employee();
cin>>na;
emp[1].set_name(na);
emp[1].set_age(23);
emp[1].set_salary(2000.0);
emp[1].print();
}

说明:
这是个简化的雇员档案管理程式,其中5~33行定义了一个employee类,他包含了一个雇员的档案数据,及对这些数据的若干处理函数。
构造函数employee,他在进行结象说明时被自动调用。这时创建的是个雇员的空档案。
第39行说明的是个对象数组,一次建立了五个雇员的空档案。
set_name(),set_age(),set_salary()三个函数可用来为雇员档案填 入姓名、年龄、工资。其中填 入姓名时要创建一个长度为该姓名字符串长度 1的字符数组,以便以字符串形式存放该雇员的姓名。
print()函数的功能是输出该雇员的档案内容。
析构函数~employee()的功能是当某雇员档案撤消或改成另一姓名时,把原占用的字符串空间释放掉。

--------------------------------------------------------------------

9.3 在平面上用直线和圆画图
编一个程式,以直线段、矩形和圆为基本图元组成一图像。
我们采用面向对象的编程方法,把直线line,矩形rectangle和圆circle设计为三个类,他们各有自己的数据和函数成员。用线、矩形和圆组合成图像,就是对这三个类的对象进行操作。
程式代码如下:
// program 6_3.cpp
#include<iostream.h>
#include<process.h>
#include<graph.h>
#include<conio.h>
class Line{
int startx,starty,endx,endy;
public:
Line(int sx,int sy,int ex,int ey)
{
startx=sx;
starty=sy;
endx=ex;
endy=ey;
}
void draw();
};
class Rectangle
{
int uplx,uply,lowrx,lowry;
public:
Rectangle(int ulx,int uly,int lrx,int lry)
{
uplx=ulx;
uply=uly;
lowrx=lrx;
lowry=lry;
}
void draw();
};
class Circle
{
int centx,int centy,radius;
public:
Circle(int cx,int cy,int r)
{
centx=cx;
centy=cy;
radius=r;
}
void draw();
};
void Line::draw()
{
_moveto(startx,starty);
_lineto(endx,endy);
} // 画一条直线
void Rectangle::draw()
{
_rectangle(_GBORDER,uolx,uply,lowrx,lowry);
} // 画一个空心矩形
void Circle::draw()
{
_ellipse(_GBORDER,centx-radius,centy-radius,centx radius,centy radius);
} // 画一个圆
void main()
{
short centx,centy;
cin>>centx>>centy;
Rectangle fram1(centx-60,centy-60,centx 60,centy 60),
fram2(centx-62,centy-62,centx 62,centy 62);
Circle disk(centx,centy,55);
Line poin1(centx,centy,centx 25,centy 25),
poin2(centx,centy,centx 12,centy 40),
bar1(centx,centy 50,centx,centy 42),
bar2(centx,centy-42,centx,centy-50),
bar3(centx-50,centy,centx-42,centy),
bar4(centx 42,centy,centx 50,centy);
if(!_setvideomode(_MAXRESMODE))
exit(1);
fam1.draw();
fram2.draw();
disk.draw();
bar1.draw();
bar2.draw();
bar3.draw();
bar4.draw();
poin1.draw();
poin2.draw();
getch();
_setvideomode(_DEFAULTMODE);
}
程式说明:
1) 这是个利用基本图像对象直线段、矩形和圆来组成一个简单的表形的程式。从这个程式的设计过程(虽然他比实际程式简化了许多)能够了解面向对象程式设计的基本方式和特征。在55~79行的main函数中首先根据需要说明若干个图元对象:两个矩形,一个圆,六个直线段,他们正是组成显示的图像的各基本图元。最后分别调用各自的draw函数,完成了显示任务。
2) 程式中采用了在图像模式下进行屏幕显示的操作方式。系统的屏幕显示可有两种基本模式:文本模式:这是系统平时工作的模式。 图像模式:当程式需要输出图像时,应把系统设为图像模式。
用setvideomode()函数把系统由文本模式转为图像模式。
在各个类的draw()函数中,利用图像库函数完成基本图元的生成显示。
在6~16和41~44行,定义了一个Line类,他由四个私有成员和两个公有成员的函数成员组成,这完全是为了简化程式。例如,还能够为该直线段配置颜色。查阅坐标。修改数据等等操作。
在18~28行和46~48行,定义了Rectangle类。
在30~39行和50~51行,定义了Circle类。
三种类的定义,只是说明了类。在58~66行的对象说明中才有了类的具体内容,同时按照 给出的不同参数,决定了这些实际的图元的位置和尺寸。对于Line,Rectangle,Circle这三个类,用户能够对其进行的操作只有两种:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 习题和解析(类和对象-09)

下一篇: C 实例教学(类的应用-01)