-3

クラス内のすべての要素を含むベクトルを宣言する方法は? 例えば:

class Book{
    string name;
    int published;
    float price;
}

ベクトルはクラスにありますか、それともメイン関数にあるのでしょうか? 次のように宣言しvector<Book *> aます。このベクトルにそれらの名前をどのように追加できますか? 複数の本がある場合、新しいベクトルを宣言する必要がありますか?

4

2 に答える 2

1

あなたが何を求めているのかわかりません。本のベクトルが必要な場合vector<Book>は、トリックを行います。現時点では、ポインターを使用しないことをお勧めします。ポインターを使用すると、他の複雑さが生じるからです。ベクター内の各 Book には、宣言した独自の要素が含まれています。

ベクトルは、複数の本を追跡する 1 つの方法です。追跡する書籍の2 つのリストが必要な場合にのみ、別のベクターを宣言する必要があります (たとえば、1 つのベクターはノンフィクションの書籍のリストで、もう 1 つのベクターはフィクションの書籍のリストです)。

ベクトルを宣言する場所は、それをどのように使用するかによって異なります。まず、main動作することをテストするために宣言する必要があります。後でLibraryクラスを作成する場合は、ほとんどの場合、そのクラス内で宣言しvector<Book>ます。

于 2012-10-31T21:22:24.673 に答える
0

ベクトルはクラスにあるのでしょうか、それともメイン関数にあるのでしょうか?

それはあまり意味がありません。std :: vectorは、その中にいくつかの要素(すべて同じタイプ)を保持できるクラスコンテナです。

次のように宣言しますvector<Book *> a

この方法で、クラスへのポインターのベクトルを宣言していることに注意してください。

次に、これらの名前をこのベクトルに追加するにはどうすればよいですか?

std :: vector :: push_backを使用して、ベクトルの最後に要素を挿入できます。

複数の本がある場合、新しいベクトルを宣言する必要がありますか?

そうですね、それこそが、複数の要素を保持するベクトルのようなコンテナを使用する理由です。より多くのベクトルを持つことは意味がありません。

では、どのようにしてベクトルを使用してデータにアクセスできますか?特定の本の価格を変更したい場合はどうなりますか

簡単にするために、角かっこを使用して、指定されたインデックスのベクトルの要素にアクセスできます。C ++では、明示的にパブリックとして宣言しない場合、クラスメンバーはデフォルトでプライベートです。したがって、これ以上の説明を避けて(最終的にはより良い設計については、getter / setterを参照)、アプローチは次のようになります。

class Book{

    public:

    string name;
    int published;
    float price;

    Book (string iName, int iPublished, float iPrice)
    {
        name = iName;
        published = iPublished;
        price = iPrice;
    }
}

std::vector<Book*> bookList = std::vector();
bookList.push_back(new Book("foo", 10, 100.0f));
bookList.push_back(new Book("bar", 11, 110.0f));

std::cout << bookList[1].name; // print bar
于 2012-10-31T21:29:35.037 に答える