设计一个大学人员管理的程序
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?????
类层次如下:
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?????
相关文章推荐
- 每日一个C++小程序(八)--设计一个人事管理的人员类
- 问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包
- 一个例程,大学人员管理信息系统的设计,不知哪里有错误,一直找不出来
- 设计一个大中学生和教师管理程序
- 【转】数据库设计经验谈(一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键)
- 设计一个学生作业完成情况的管理程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 设计一个学生作业完成情况的管理程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 最近设计了一个生成asp代码的程序,同时也可以作为数据库管理查询的软件,有兴趣的朋友可以去下载!
- 设计一个学生作业完成情况的管理程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 最近设计了一个生成asp代码的程序,同时也可以作为数据库管理查询的软件,发两张图,等完全做好了,给大家共享!
- 一个C#编写的snmp程序,可使网络管理人员进行参考、开发-A C# Prepared snmp procedures, will enable network managers to carry o
- 设计一个学生作业完成情况的管理程序
- 我想做产品,我希望设计一个电脑系统的一个自动化管理程序
- 一个大学C语言试题的简单实现--员工信息管理程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 设计一个学生作业完成情况的管理程序