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
相关产品推荐
相关产品推荐

