Hỏi về reinterpret_cast và cách đọc ghi file trong C++

a/c cho em hỏi về hàm ghitep này, tại sao lại mở file input.dat ở dạng binary ạ, cấu trúc câu lệnh write và câu lệnh reinterpret_cast này dùng để làm gì ạ?

void bangluong::ghitep(){
    ofstream ghi("input.data", ios::binary);
    ghi.write(reinterpret_cast<const char*>(this), sizeof(bangluong));
    ghi.close();
}
void bangluong::doctep()
{
    ifstream doc("input.dat", ios::binary);
    bangluong a;
    doc.read(reinterpret_cast<char*>(&a), sizeof(bangluong));

    cout << "\n ---------Thong tin bang luong doc tu tep--------\n";
    cout << "thang: " << a.thang << endl;
    for (int i = 1; i <= a.tscando; i++)
    {
        cout << "\n Luong cua can bo " << i << " la: " << a.dslcanbo[i].luong;
    }
        cout << "\n Tong luong thang: " << a.tongluong;

    doc.close();
}