我想要的是一个函数,每次调用它时都会创建一个新的不同实例(使用不同的名称......)
就像这样:
void person::new_person(){
person *(id+index) = new person(name_temp, age_temp, quote_temp);
}
但它不起作用......我不知道该怎么做......(每次我创建一个新实例时索引都加一)。 我意识到每次我制作指针并在其上添加空格,就像那样:
int*p;
*(p+1) = 5;
它编译,但在运行时冻结(我把它得到的记忆不允许),以便"人*(id + index)"可能也行不通。 你怎么看?
答案 0 :(得分:8)
尝试将person
保存在标准容器中:
std::vector<person> people;
void person::new_person(std::string name, int age, std::string quote){
people.push_back(person(name, age, quote));
}
答案 1 :(得分:5)
你的意思是这样的吗?
#include <string>
person make_person()
{
static unsigned i = 0;
return person(std::to_string(i++));
}
答案 2 :(得分:3)
“我想要的是一个函数,每次调用它时都会生成一个新的不同实例(使用不同的名称......)”
这就是所谓的构造函数,它是一种特殊的成员函数,与类同名。它没有函数结果类型,甚至没有void
。它可以是这样的:
class Person
{
private:
string name_;
public:
Person( string name )
: name_( name )
{}
};
然后有多种方法可以调用它,具体取决于您希望存储新实例的位置。如,
int main()
{
Person a( "A" ); // Local variable
Person( "B" ); // A temporary, it's already destroyed... ;-)
vector< Person > v;
v.emplace_back( "C" ); // As a new item at the end of vector.
}
加上一些,但我猜上面的三种方式与完全初学者最相关。
请注意,使用向量时,每次push_back
或emplace_back
时,您都会使用新索引创建新的最后一项。调用size
方法可以找出您当前在向量中有多少项。 查看文档以获取更多信息。
顺便说一下,你应该给自己做一本教科书。