如何在 运行 时间创建和命名对象?

How do I create and name an object at run time?

我有一个 class 叫 studentInfo:

#pragma once
#include<string>
using namespace std;

class studentInfo
{
public:
    //constructors
    studentInfo() {}
    studentInfo(string n, int a, string g);

    void printDetails();

private:
    string name;
    string gender;
    int age;
};

.cpp 文件:

#include "studentInfo.h"
#include<string>
#include<iostream>

studentInfo::studentInfo(string n, int a, string g)
{
    name = n;
    age = a;
    gender = g;
}

void studentInfo::printDetails()
{
    std::cout << "Name: " << name << "\nAge: " << age << "\nGender: " << gender << endl;
}

所以我知道如何使用构造函数创建一个实例,例如:studentInfo s1182("Ollie", 19, "Male"); 但有没有一种方法可以在 运行 时完成并让实例由用户输入命名? 大致如下:

string ID;
cin >> ID;

studentInfo *what ID is*("Bob", 18, "Male");

这样,如果输入的 ID 是 s2212,则该实例将被命名为 s2212,这意味着我可以 s2212.printDetails()

这是不可能的。无法在运行时确定标识符。

可能接近您尝试的方法是使用从字符串名称到学生对象的关联映射。

你最好的选择是使用这样的地图

string ID;
cin >> ID;

map<string, studentInfo> students;

if(students.find(ID) == students.end())
   students[ID] = studentInfo("Bob", 18, "Male");

P.S.: 有多种方法可以将条目插入地图。阅读 reference manual.