电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>C++实例教学(类的应用-02):

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

来源:www.cncfan.com | 2006-1-13 | (有2175人读过)

职员档案管理程序
是这一个简化了的雇员档案管理程序。其中把雇员的档案数据和对这些数据的设置、修改、删除等操作组成一个程序模块。程序通过这个模块----类的公有部分对档案数据进行处理,实现了面向对象程序设计的“封装”功能。
// 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这三个类,用户可以对其进行的操作只有两种:
1) 通过构造函数 创建具有指定参数的对象;
2) 调用公有成员函数,显示这一图元。
从这里可以感受到类和对象对于其数据封装的含义。
从这个例子中,我们指出了把程序以类的形式组织起来的方法才优越性,但也应从中发现一些问题和不足的地方。例如:
三个类是互不相关的,但仔细观察会发现类Line和类Rectangle之间本来是有内在联系的,一个矩形实际上是由两条横线和两条纵线组成的,类Rectangle的对象的创建是否可以借助于类Line的几个对象的创建来实现呢?
另外三个类中都包含了象draw()这样的公有函数,也许可以具有象着色color()等等这样的共同的函数成员。
如何在程序设计中表现不同的类之间的层次关篛,相互间的相关性,这要用到其它的一些知识,如派生类、虚函数等概念和手段,使程序的组织更加合理和严密。
C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号