在运行时有没有一种简单的方法来创建/命名C++对象?
一般来说,我对编程非常陌生 所以我正在构建一个程序,它只需要获取关于用户的信息并将其存储在一个对象中。所以每次有新用户出现时,我都需要一个新的对象和一个新的名称,这只是我正在构建的一个程序。我知道我已经在堆上分配了太多的空间,但是如果我不知道我要收集多少对象,我怎么知道我需要多少空间呢?我想我需要做的是在堆上分配内存,在创建obj的函数中分配内存,这样每次调用函数时我都会得到所需的内存?我读了一些有人建议使用向量的文章,所以我简单地学习了关于向量的介绍,但是当我尝试这个的时候在运行时有没有一种简单的方法来创建/命名C++对象?,c++,C++,一般来说,我对编程非常陌生 所以我正在构建一个程序,它只需要获取关于用户的信息并将其存储在一个对象中。所以每次有新用户出现时,我都需要一个新的对象和一个新的名称,这只是我正在构建的一个程序。我知道我已经在堆上分配了太多的空间,但是如果我不知道我要收集多少对象,我怎么知道我需要多少空间呢?我想我需要做的是在堆上分配内存,在创建obj的函数中分配内存,这样每次调用函数时我都会得到所需的内存?我读了一些有人建议使用向量的文章,所以我简单地学习了关于向量的介绍,但是当我尝试这个的时候 string ob
string objname;
cin >> objname;
vector<string> v;
v.push_back(objname);
usersclass v.back();
v.back().somefunc();
请给我举个例子,这不是为了学校或我自己教的任何东西 您正在尝试做一些奇怪的事情,因为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::映射名称;并将其与名称[objname].somefunc一起使用 map为您管理所有存储,因此您不必分配或取消分配任何内容
我还没有研究过std::map,所以我可以对此发表评论,但是的StarlRight是对的,不正确的代码我真的不理解obj/类,如果另一个初学者需要一个超级简单的示例程序,这是有效的:
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;
}
嘿……OP想从用户那里输入一个字符串输入,并用它创建一个对象作为对象的字符串,它比编程便宜:使用C++的原理和实践?53美元像什么@Jhonnyballugas知识-是你能做的最好的投资
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;
}