c++ - 有没有办法组合两个变量?

标签 c++ class variables combinations stdvector

我一直在尝试让我的代码动态地将类对象分配到文件以供以后读取,但在将用户输入保存到每个不同的对象中时遇到困难。

我试图让用户输入他们的姓名、年龄和电话号码,并将其保存到文件中,以便稍后读取,希望使用相同的方法来运行该文件。

我尝试使用数组,但无法保存对象的所有三个字段。有没有可以使用的动态变量?

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cassert>
using namespace std;

string mName, mID, mPhoneNumber;
int id = 0;
class Student
{
public:
   string mName;
   string mId;
   string mPhoneNumber;

   Student(string id = "", string name = "", string phone = "") : mId(id), mName(name), mPhoneNumber(phone)
   {}

   bool operator==(const Student& obj)
   {
      return (mId == obj.mId) && (mName == obj.mName) && (mPhoneNumber == obj.mPhoneNumber);
   }

   /*
    * Write the member variables to stream objects
    */
   friend ostream& operator << (ostream& out, const Student& obj)
   {
      out << obj.mId << "\n" << obj.mName << "\n" << obj.mPhoneNumber << endl;
      return out;
   }
   /*
    * Read data from stream object and fill it in member variables
    */
   friend istream& operator >> (istream& in, Student& obj)
   {
      in >> obj.mId;
      in >> obj.mName;
      in >> obj.mPhoneNumber;
      return in;
   }
};

int main()
{
   cin >> id;
   Student stud1("1", "Jack", "4445554455");
   Student stud2("4", "Riti", "4445511111");
   Student stud3("6", "Aadi", "4040404011");

   // open the File
   ofstream out("students.txt");
   // Write objects to file (targets to cout)
   out << stud1;
   out << stud2;
   out << stud3;

   out.close();
   // Open the File
   ifstream in("students.txt");
   Student student1;
   Student student2;
   Student student3;
   // Read objects from file and fill in data
   in >> student1;
   in >> student2;
   in >> student3;
   in.close();
   // Compare the Objects
   assert(stud1 == student1);
   assert(stud2 == student2);
   assert(stud3 == student3);

   cout << stud1 << endl;
   cout << stud2 << endl;
   cout << stud3 << endl;
   return 0;
}

最佳答案

您可以使用std::vector通过以下方式:

std::vector<Student> my_students;
for (std::size_t i = 0; i < 3; i++) {
    Student tmp;
    in >> tmp;
    my_students.push_back(tmp);
}

关于c++ - 有没有办法组合两个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61559974/

相关文章:

php - 创建类的集合方法的正确方法

JavaScript - 使用变量来引用属性名称?

c++ - 转换 VS 2010 和 2015 之间的差异

android - Android 上的 Qt 触觉反馈

c++ - 为什么 C++ 将表达式中的 signed int 转换为 unsigned int?

iOS Swift - 来自其他类的函数不运行

c# - 未知数量类型参数的类设计

java - 为什么我的 switch block 中出现 "variable might not have been initialized"编译器错误?

java - 如何从 registerReceiver 内部类获取变量的值

c++ - 使用 NMAKE 将所有源代码制作在一个目录中?