以下是一个简单的例子,展示如何在C++中保存和读取对象数组:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// 定义一个简单的Person类
class Person {
public:
    string name;
    int age;

    Person() {}

    Person(string name, int age) {
        this->name = name;
        this->age = age;
    }

    // 重载输出运算符,方便输出对象信息
    friend ostream& operator<<(ostream& os, const Person& person) {
        os << "Name: " << person.name << ", Age: " << person.age;
        return os;
    }
};

// 保存Person对象数组到文件
void save_persons(Person* persons, int size, const string& file_name) {
    ofstream ofs(file_name, ios::binary);
    if (ofs) {
        ofs.write((char*)&size, sizeof(int)); // 先写入数组大小
        ofs.write((char*)persons, sizeof(Person) * size); // 再写入对象数组
        ofs.close();
        cout << "Save persons to file success." << endl;
    } else {
        cout << "Cannot open file: " << file_name << endl;
    }
}

// 从文件读取Person对象数组
Person* load_persons(int& size, const string& file_name) {
    ifstream ifs(file_name, ios::binary);
    if (ifs) {
        ifs.read((char*)&size, sizeof(int)); // 先读取数组大小
        Person* persons = new Person[size]; // 创建对象数组
        ifs.read((char*)persons, sizeof(Person) * size); // 读取对象数组
        ifs.close();
        cout << "Load persons from file success." << endl;
        return persons;
    } else {
        cout << "Cannot open file: " << file_name << endl;
        return nullptr;
    }
}

int main() {
    // 创建Person对象数组
    Person persons[] = {
        Person("Tom", 20),
        Person("Jerry", 18),
        Person("Alice", 22)
    };
    int size = sizeof(persons) / sizeof(Person);

    // 保存对象数组到文件
    save_persons(persons, size, "persons.dat");

    // 从文件读取对象数组
    Person* loaded_persons = load_persons(size, "persons.dat");
    for (int i = 0; i < size; i++) {
        cout << loaded_persons[i] << endl;
    }
    delete[] loaded_persons;

    return 0;
}

在上面的例子中,我们定义了一个简单的Person类,包含姓名和年龄两个属性。我们使用save_persons函数将Person对象数组保存到文件中,使用load_persons函数从文件中读取Person对象数组。在保存对象数组时,我们先写入数组大小,再写入对象数组;在读取对象数组时,我们先读取数组大小,再创建对象数组,最后读取对象数组。

需要注意的是,在保存和读取对象数组时,我们使用了二进制文件。这意味着我们需要对对象进行序列化和反序列化,即将对象转换为字节流,再从字节流恢复为对象。在本例中,我们没有对Person对象进行序列化和反序列化,而是直接将对象的内存数据写入文件中。这种做法并不安全,因为对象的内存布局可能会随着编译器和操作系统的不同而变化。在实际开发中,我们应该使用序列化库,如Google的Protocol Buffers,来进行对象的序列化和反序列化

c++对象数组保存文件读取文件代码

原文地址: https://www.cveoy.top/t/topic/giLn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录