0

我想要的是一个函数,每次我调用它时都会创建一个新的不同实例(使用不同的名称......)

像这样:

void person::new_person(){
  person *(id+index) = new person(name_temp, age_temp, quote_temp);
}

但它不起作用......我不知道我应该怎么做......(每次创建新实例时索引都会加一)。我意识到每次我做一个指针并在上面添加空格,就像这样:

int*p;
*(p+1) = 5;

它可以编译,但在运行时会冻结(我认为它不允许获取内存),因此“person *(id + index)”可能也不起作用。你怎么看?

4

3 回答 3

8

尝试将您person的 s 保存在标准容器中:

std::vector<person> people;
void person::new_person(std::string name, int age, std::string quote){
      people.push_back(person(name, age, quote));
}
于 2012-10-30T20:53:35.950 回答
5

你的意思是这样的?

#include <string>

person make_person()
{
    static unsigned i = 0;
    return person(std::to_string(i++));
}
于 2012-10-30T20:53:09.327 回答
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_backemplace_back您创建一个新的最后一个项目时,都会使用新的索引。调用该size方法以找出向量中当前有多少项。查看文档以获取更多信息。

顺便说一句,你真的应该给自己买一本教科书。

于 2012-10-30T21:07:58.610 回答