You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何读取文本文件数据并存储到动态数组中的不同类对象

解决方案

1 先修正类定义笔误

你给出的类定义存在命名不匹配问题:类声明为Person,但构造函数、拷贝构造函数名称写为Stock,修正后的类定义如下:

class Person {
private:
    std::string name;
    double age;

public:
    // 构造函数
    Person(const std::string& name = "", double age = 0)
    {
        this->name = name;
        this->age = age;
    }

    // 拷贝构造函数
    Person(const Person& s)
    {
        this->name = s.name;
        this->age = s.age;
    }

    // 打印函数
    void display() const
    {
        std::cout << "Name is " << name << ", "
        << "Age is " << age << ".\n";
    }

    // getter函数
    std::string getName() const
    {
        return name;
    }
    double getAge() const
    {
        return age;
    }
};

2 读取文件生成对象的实现

你的文本文件每两行对应一个Person对象的属性,且姓名允许包含特殊字符、空格,因此采用逐行读取的逻辑实现,完整示例代码如下:

#include <iostream>
#include <fstream>
#include <string>
// 上述修正后的Person类定义放在此处

int main() {
    // 分配大小为8的动态数组
    Person* personArr = new Person[8];
    // 打开文本文件,替换为你的实际文件路径
    std::ifstream inFile("person.txt");
    if (!inFile.is_open()) {
        std::cerr << "文件打开失败" << std::endl;
        delete[] personArr;
        return 1;
    }

    std::string nameBuf, ageBuf;
    // 循环读取8个对象
    for (int i = 0; i < 8; ++i) {
        // 逐行读取姓名、年龄
        std::getline(inFile, nameBuf);
        std::getline(inFile, ageBuf);
        // 年龄转double类型后构造对象,存入数组
        personArr[i] = Person(nameBuf, std::stod(ageBuf));
    }
    inFile.close();

    // 测试:打印所有对象验证读取结果
    for (int i = 0; i < 8; ++i) {
        personArr[i].display();
    }

    // 释放动态数组内存,避免泄漏
    delete[] personArr;
    return 0;
}

3 注意事项

  • 如果姓名行末尾存在多余空格,可自行加逻辑去除,不影响正常构造
  • 上述代码默认文件格式合法,若需要兼容异常场景,可自行补充读取失败、年龄格式非法的判断逻辑
  • 若没有强制要求用C风格动态数组,更推荐用std::vector<Person>存储对象,无需手动管理内存

内容的提问来源于stack exchange,提问作者Aman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:15:03