0

私が欲しいのは、(別の名前で...)呼び出すたびに新しい別のインスタンスを作成する関数です。

ちょうどこのような:

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

しかし、それは機能しません...どうすればよいかわかりません...(新しいインスタンスを作成するたびにインデックスが1つずつ追加されます)。そして、私はポインタを作成し、その上にスペースを追加するたびに、次のように気づきました。

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

コンパイルされますが、実行中にフリーズするため(メモリの取得は許可されていないと思います)、「person *(id + index)」も機能しない可能性があります。どう思いますか?

4

3 に答える 3

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));
}
于 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.
}

プラスいくつかですが、上記の3つの方法は、完全な初心者に最も関連があると思います.

ベクターを使用すると、新しいインデックスを使用して新しい最後のアイテムを作成するたびに注意してくださいpush_backemplace_backこのメソッドを呼び出してsize、ベクター内に現在いくつのアイテムがあるかを調べます。詳細については、ドキュメントを確認してください。

ところで、あなたは本当に教科書を手に入れるべきです。

于 2012-10-30T21:07:58.610 に答える