```c++
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
class Date {
public:
// 构造函数,接受年、月、日的参数
Date(int year=0, int month=0, int day=0) : year(year), month(month), day(day) {}
int getYear() const { return year; }
int getMonth() const { return month; }
int getDay() const { return day; }
private:
int year;
int month;
int day;
};
class Person {
public:
// 构造函数,接受编号、姓名、性别、生日和基本工资的参数
Person() : id(0), name(""), sex(' '), birth(Date()), baseSalary(0) {}
Person(int id, string name, char sex, Date birth, int baseSalary)
: id(id), name(name), sex(sex), birth(birth), baseSalary(baseSalary) {}
int getId() const { return id; }
string getName() const { return name; }
char getSex() const { return sex; }
Date getBirth() const { return birth; }
int getBaseSalary() const { return baseSalary; }
friend ostream& operator << (ostream& os, Person& person);
private:
int id;
string name;
char sex;
Date birth;
int baseSalary;
};
ostream& operator << (ostream& os, Person& person){
os<<person.id<<" "<<person.name<<" "<<person.sex<<" "<<person.birth.getYear()<<" "<<person.birth.getMonth()<<" "<<person.birth.getDay()<<" "<<person.baseSalary;
return os;
}
int main() {
fstream file("data.bin", ios::in | ios::out | ios::binary);
/*Person graduate = Person(1, "LiPing", 'm', Date(2002, 12, 3), 4000);
if (file.write(reinterpret_cast<const char *>(&graduate), sizeof(graduate))) {
//writeSuccess = true; // 写入成功标记为true
} else {
cerr << "写入文件失败!" << endl; // 输出错误信息并退出程序或采取其他操作
file.close(); // 虽然操作失败,但仍然关闭文件流以避免后续问题
return 1; // 返回错误码或采取其他操作
}*/
if (!file.is_open()) {
cerr << "无法打开文件" << endl;
return 1;
}
// 确保文件的操作也有错误处理
bool writeSuccess = false;
// 写入研究生信息
Person graduate = Person(1, "LiPing", 'm', Date(2002, 12, 3), 4000);
if (file.write(reinterpret_cast<const char *>(&graduate), sizeof(graduate))) {
writeSuccess = true; // 写入成功标记为true
} else {
cerr << "写入文件失败!" << endl; // 输出错误信息并退出程序或采取其他操作
file.close(); // 虽然操作失败,但仍然关闭文件流以避免后续问题
return 1; // 返回错误码或采取其他操作
}
file.seekg(0, ios::beg); // 重新定位到文件开头以读取数据(这一步可以在写入之后立即完成)
Person person; // 用于存储从文件中读取的数据的对象实例
if (!file.read(reinterpret_cast<char *>(&person), sizeof(person))) { // 检查读取是否成功
cerr << "读取文件失败!" << endl; // 输出错误信息并退出程序或采取其他操作
return 1; // 返回错误码或采取其他操作
} else { // 如果读取成功,输出读取到的数据并结束程序或采取其他操作
cout << person << endl; // 输出读取到的数据对象实例的信息(这里假设重载了<<运算符)
file.close(); // 关闭文件流以释放资源或其他相关操作(如果还有其他操作的话)
return 0; // 返回成功码或其他相关操作结果(如果还有其他操作的话)
}
}
```