c++ 序列化包含字符串和指向另一个对象的指针的对象



这个问题是我大学实验室工作的一部分!

我有两个班级,studentcourse。这两个类的基本接口如下所示:

学生.h

    class student
    {
    private:
        int id;
        string name;
        int course_count;
    public:
        student();
        student * student_delete(int);
        void student_add(int);
        static student * student_add_slot(int);
        int get_id();
        int get_course_count();
        string get_name();
        void set_course_count(int);
        void student_display();
        course * course_records;
        void operator= (const student &);
    };

课程.h

class course
{
private:
    string id;
    short credit_hours;
    string description;
public:
    course();
    course * remove_course(course*, int);
    static course * add_course_slots(course*, int);
    int add_course(course*,int);
    string get_id();
    string get_description();
    void course_display(int);
    short get_credit_hours();
};

我被要求以二进制模式将学生对象(仅成员变量(写入文件。现在我知道我必须序列化对象,但我不知道应该如何进行。我知道C++为基本类型提供了基本的序列化(如果我错了,请纠正我(,但我不知道如何将学生对象(动态分配的数组(中的字符串和课程记录变量序列化到文件。

请询问您是否需要任何额外的东西。谢谢!

你有ISO CPP标准的最佳答案。

我不能比这更好地解释。

请浏览问题编号 (4,9,10,11( 以获取特定问题的答案。

https://isocpp.org/wiki/faq/serialization

因为您只是尝试序列化成员变量,所以问题相当微不足道。下面是一个小示例,展示了如何将如此简单的变量序列序列化为连续的字节 (char( 数组。我没有测试代码,但概念应该足够清晰。

// serialize a string of unknown lenght and two integers
// into a continuous buffer of chars
void serialize_object(student &stu, char *buffer)
{
    // get a pointer to the first element in the
    // buffer array
    char *char_pointer = buffer;
    // iterate through the entire string and
    // copy the contents to the buffer
    for(char& c : stu.name)
    {
        *char_pointer = c;
        ++char_pointer;
    }
    // now that all chars have been serialized we
    // cast the char pointer to an int pointer that
    // points to the next free byte in memory after
    // the string
    int *int_pointer = (int *)char_pointer;
    *int_pointer = stu.id;
    // the compiler will automatically handle the appropriate
    // byte padding to use for the new variable (int)
    ++int_pointer;
    // increment the pointer by one size of an integer
    // so its pointing at the end of the string + integer buffer
    *int_pointer = stu.course_count;
}

现在缓冲区变量指向连续内存数组的开始包含字符串和打包到字节中的两个整数变量。

相关内容

  • 没有找到相关文章

最新更新