尝试使用变量名实例化C ++中的类成员

时间:2010-06-16 00:06:10

标签: c++ class

我正在为课程编写一个程序,要求我们创建一类“书”。然后我们应该根据用户的要求创建该类的新实例化。我是C ++的新手,所以我试图编写这个,但遇到了问题。

主要问题是如果我不知道有多少我必须提前做,我如何用变量实例化一个类。用户可以要求添加1本书或1000本。我正在查看这个基本代码:

这是我开始使用的简单代码。我希望有一个索引int保持一个数字,并让我创建的书类由该int调用(0,1,2等等...)所以我试图将传入的索引int转换为字符串,但我'有点卡在这里。

void addBook(int index){
    string bookName;
    std::stringstream ss;
    ss << index;

    book bookName;

    cout << "Enter the Books Title: ";
    cin >> bookName.title; 
}

但显然这不起作用,因为“bookName”是计算机的字符串,而不是我试图创建的类成员。

我在网上和我的文本中看到的所有教程都显示了在代码中用名称实例化的类,但我只是不知道如何使它变量,所以我可以创建任意数量的“书籍”用户可能想要。任何有关这方面的见解将不胜感激。谢谢你的时间。

2 个答案:

答案 0 :(得分:6)

根据您的类型book,如果您要创建图书清单,请尝试使用std::vectorstd::liststd::deque等容器。

typedef std::vector<book> library_type;

library_type library;

book catch22("Catch 22")
library.push_back(catch22);

book haltingState("Halting State");
library.push_back(haltingState);

您可以创建书籍并从循环中添加到库中,这听起来就像您想要的那样。

您选择的容器类型取决于您想要的访问模式。例如,如果您想要添加这样的书籍,std::vector很好,您很少想要以任意顺序删除它们。如果你改变主意,可以稍后改变类型。

答案 1 :(得分:0)

正如马特上面提到的,你要做的是先创建一个名为book的类。在构造函数中,您可以设置各种参数,如标题,作者,ID或任何您需要的参数。类似的东西(注意编译器知道将参数分配给类成员变量,即使它们具有相同的名称):

Book(int ID, std::string name) : ID(ID), name(name)
{}

你的班级看起来像这样:

class Book
{

private:
int ID;
std::string name;

public:
//constructor, etc.
};

另外,如上所述,除非您需要某些特定功能,否则矢量可能是一个不错的首选。如果您输入,请尝试使用do ... while循环,如果用户将输入至少一本书。