您的位置:首页 > 其它

设计一个大学人员管理的程序

2008-03-18 21:33 344 查看
该程序可以管理大学的几类人员:学生(student)教员(faculty)教授(professor)。

类层次如下:

 person派生student和faculty,faculty派生professor,studentfaculty 继承了sutdent和faculty。

由于studentfaculty类是合并了两个类的概念建立起来的,而这两个类又由同一个类派生而来,所以考虑继承时把person说明为虚基类。防止studentfaculty两次构造person的数据成员。

#include<iostream.h>
#include<string.h>
  char *copy(char *s)
{
 char *temp=new char[strlen(s)+1];
 strcpy(temp,s);
 return temp;
}
class person
{
protected:
 char* name;
 int age;
 person()       //保护的构造函数在建立该类的对象时不能被调用,以防止该类的对象被不正确初始化。
 {
  name=0;
  age=0;
 }
 person(char *n,int a):name(copy(n)),age(a)
 {}
 ~person()
 {
  delete name;
 }
};
class student:virtual public person
{
private:
 char *major;
protected:
 student(char *m):major(copy(m)) //创建对象时不被调用,声明此保护构造函数以备子类构造函数初始化时使用。
 {}
public:
 student(char *n,int a,char *m):person(n,a),major(copy(m))
 {}
    ~student()
    {
  delete major;
 }
    void print()
 {
  cout<<name<<endl;
  cout<<"Age:"<<age<<" "<<"Magor:"<<major<<endl;
 }
};
class faculty:virtual public person
{

 

protected:
 char* dept;
 faculty(char *d):dept(copy(d))
 {}
public:
 faculty(char *n,int a,char* d):person(n,a),dept(copy(d))
 {}
 ~faculty()
 {
  delete dept;
 }
 void print()
 {
  cout<<name<<endl;
  cout<<"Age:"<<age<<" "<<"department:"<<dept<<endl;
 }
};
class professor:public faculty
{
private:
 bool dotorial_tutor;
public:
 professor(char *n,int a,char *d,bool dt):person(n,a),faculty(d), dotorial_tutor(dt)
 {
 }
 ~professor()
 {}
 void print()
 {
        cout<<name<<endl;
  cout<<"Age:"<<age<<" "<<"department:"<<dept<<endl;
  if(dotorial_tutor)
   cout<<"tutor!";
  else
   cout<<"not tutor."<<endl;
 }
};

class studentfaculty:public student,public faculty
{
public:
 studentfaculty(char *n,int a,char *m,char *d):person(n,a),student(m),faculty(d)
 {}
 void print()
 {
  student::print();
  cout<<"department:"<<dept<<endl;
 }

};
void main()
{
 student mystudent("zhang",25,"computer");
 faculty myfaculty("wang",35,"engineering");
 professor myprofessor("li",45,"computer",true);
 studentfaculty mystudentfaculty("zhao",32,"english","managerment");
 mystudentfaculty.print();
 myprofessor.print();
 myfaculty.print();


 

 

总结:1. 虚基类的使用,防止基类数据在派生类对象中重复创建,即只创建一次。

             2.protected构造函数的使用,建立该类的对象时不能调用保护构造函数,防止该类的对象被不正确的初始化。

疑问:copy()函数为何声明为static?????
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class delete
相关文章推荐