class Worker {
public:
int m_id; //职工编号
string m_name; //职工姓名
string m_status; //职工职务
string m_department; //所属部门
Worker *m_nextEmp; //下一个职员
};
/*
Employ 、Manager 和 Boss是 Worker 的三个子类
*/
//读取二进制文件
void WorkerManager::Get_Binary() {
Worker *preEmp=NULL;
Worker* head = &m_headEmp; //l链表头结点
ifstream ifs("WorkerMessage.bat",ios::in|ios::binary );
if (!ifs.is_open()) {
cout << "文件打开失败!" << endl;
return;
}
ifs.read((char*)&number,sizeof(int)); //读取职员人数
while (ifs.read((char *)preEmp, sizeof(Worker))) {
if (preEmp->m_status == "职员") { //根据文本中的职务创建不同类,并加入链表
head->m_nextEmp = new Employee(preEmp->m_id,preEmp->m_name,preEmp->m_department);
head = head->m_nextEmp;
}
else if (preEmp->m_status == "经理") {
head->m_nextEmp = new Manager(preEmp->m_id, preEmp->m_name, preEmp->m_department);
head = head->m_nextEmp;
}
else { //Boss
head->m_nextEmp = new Boss(preEmp->m_id, preEmp->m_name, preEmp->m_department);
head = head->m_nextEmp;
}
}
}
//写入二进制文件
void WorkerManager::Save_Binary() {
Worker* preEmp = m_headEmp.m_nextEmp;
ofstream ofs("WorkerMessage.bat",ios::out | ios::binary);
ofs.write((const char*)&m_number, sizeof(int)); //写入人数
while (preEmp != NULL) {
ofs.write((const char*)preEmp, sizeof(Worker));
preEmp = preEmp->m_nextEmp;
}
}
保存到二进制二进制文件可以执行,但是一到从里面读取,程序就会中断,我想根据读出的职务创建不同的子类合成一个链表,我到底应该怎么做呢,求解答。(顺便问一下,C++里面创建的文件流对象osf或者ifs和C语言里面的FILE *fp是类似的吗,都表示在文件中的位置)