是否有一种简单的方法可以在运行时在C 中创建/名称对象

Is there a simple way to create/name objects in c++ during runtime?

本文关键字:运行时 创建 对象 一种 方法 简单 是否      更新时间:2023-10-16

我一般对编程的新手!

因此,我正在构建一个程序,该程序只需获取有关用户的信息并将其存储在对象中。因此,每次新用户出现时,我都需要一个带有新名称的新对象(这只是我要练习的程序)。我知道我在堆上分配了空间,但是如果我不知道要净到多少个对象,我怎么知道我需要多少空间?我认为我需要做的是在创建OBJ的函数中分配内存,因此每次称为函数时,我都会获得所需的内存?我读了一些人建议使用向量的东西,所以我简要介绍了一个关于这些的简介,但是当我尝试此

string objname;
cin >> objname;
vector<string> v;
v.push_back(objname);
usersclass v.back();
v.back().somefunc();

出现错误,我说这与以下错误没有什么不同:

string objname;
cin >> objname;
usersclass objname;
objname.somefunc();

请给我一个例子,这不是给学校或我在自学的任何东西。

您在运行时不能命名对象。实际上,在运行时,所有这些不错的变量名称都消失了,构建程序时由编译器和链接器取代。

您可以做的是std::map<std::string, usersclass> names;,并将其与names[objname].somefunc()

一起使用

std::map为您管理所有存储空间,因此您不必分配或处理任何内容。

std::map

上的文档

您正在尝试做奇怪的事情,因为vector v仅包含字符串,而您只是编写不正确的代码。

我假设您要创建usersclass对象,因此您需要一个以std::string为参数的构造函数,并且您的代码应该是这样的。

class usersclass {
public:
    usersclass(const std::string& arg) : m_string(arg) {};
    void somefunc() { /* 'dunno, maybe std::cout << m_string' ? */ }
private:
    std::string m_string;
}
// somewhere in main()
string objname;
cin >> objname;
usersclass userobject{ objname };
userobject.somefunc();

但总的来说,我建议从这里阅读任何初学者书。这对您非常有帮助。

我尚未查看std ::映射,所以我可以对此进行评论,但是,是的,starl1ght是正确的,我真的不理解obj/class的代码,以防万一初学者需要一个超简单的示例程序:

int main()
{
std::vector<newclass> vnewclass;
int x(1);
int z(0);
int c;
while(x == 1)
{
    std::cout << z << std::endl;
    newclass objs;
    objs.printhi();
    objs.enterdata();
    objs.printdata();
    vnewclass.push_back(objs);
    std::cout << "add obj ?" << std::endl;
    std::cin >> x;
    z++;
}
std::cout << "what obj would you like to view ?" << std::endl;
std::cin >> c;
vnewclass[c].printdata();
return 0;
}