private:
int top;//项目记录指针 project pro[m]; RData();//构造函数 void clear()//清除函数定义 { }
int addproject(int n,char *na,int nn,char *nb);//项目信息添project *equal(int projectid)//按编号查找 { }
{ }
return &pro[i];
for(int i=0;i<=top;i++) top=-1;
public://外部接口
加,虚函数重新定义
if(pro[i].getnumber())projectid&&pro[i].gettag()==0;
return NULL;
void output();//输出函数 void projectdate();//操作函数
void sort(project *b,int c);//排序函数 ~RData();//析构函数
};
通过公有派生,project类和Rdata类派生出除构造函数、析构函数和虚函数之外的全部成员,由于基类的成员是公有和私有类型,因此在派生类中的成员函数中,从自己基类继承来的成员全部可以访问,而对于建立project类和Rdata类对象的外部模块来讲,基类的保护和私有的成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类project和Rdata的数据的可靠保护。在程序中,项目所需的编号、名称、负责人和等级采用动态分配内存,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。其余的派生函数负责项目的输入输出、提取、清除等工作。
- 5 -
4.2 类的实现
//project类的实现
void project::output()//读出项目信息 { }
void project::addproject(int n,char *na,int nn,char *nb)//项目信息添加,虚函数 { }
//Rdata类的实现
RData::~RData()//析构函数 { }
void RData::output()//读出项目信息 {
for(int i=0;i<=top;i++)//输出每一条项目信息
- 6 -
cout<<\编号\输出编号 cout< cout<<\负责人\输出负责人 cout< tag=0; number=n; strcpy(name,na);//调用strcpy函数,输入名称 leval=nn; strcpy(charge,nb);//调用strcpy函数,输入负责人 fstream file(\for (int i=0;i<=top;i++) if (pro[i].gettag()==0)//释放内存 file.write((char*)&pro[i],sizeof(pro[i])); file.close(); } pro[i].output(); int RData::addproject(int n,char *na,int nn,char *nb)//项目信息添加,虚函数重新定义 { } RData::RData()//构造函数 { } void RData::sort(project *b,int c)//对排序函数的声明 { int i,j; project temp; int choose;//输入的选项 cout<<\按项目编号排序:\\n\project s; top=-1;//清空所有项目信息 fstream file(\//打开一个输入文件 while(1) { } file.close(); file.read((char *)&s,sizeof(s)); if (!file)break; top++; pro[top]=s; project *p=equal(n);//查找是否存在 if (p==NULL) { } return 0; top++; pro[top].addproject(n,na,nn,nb);//通过指针进行添加项目信息 return 1; - 7 - cout<<\按项目名称排序:\\n\cout<<\请输入要进行的操作:\cin>>choose; if(choose==1)//冒泡排序法对项目按编号排序 { } for (i=0;i<=c;i++) { } if (choose==2)//冒泡排序法对项目按名称排序 { for(i=0;i<=c-1;i++) { } for (i=0;i<=c;i++) for(j=j+1;j<=c;j++) { } if(strcmp(b[j].getname(),b[i].getname())>=0) { } temp=b[i]; b[i]=b[j]; b[j]=temp; b[i].output(); for(j=0,j<=c;j++;) { } if (b[j].getnumber()>b[i].getnumber()) { } temp=b[i]; b[i]=b[j]; b[j]=temp; - 8 -