实例化对象并从向量中保存项目

时间:2017-02-17 17:25:50

标签: c++ object getter-setter

首先,如果代码草率或错误,我很抱歉。我在使用c ++时遇到了困难。

我正在尝试从文件创建客户并将每个客户保存为对象客户并存储每个变量。

我已成功打开并读取文件,将文字保存到矢量中。我现在需要创建一个客户并保存信息。

我的问题是 - 现在我有一个包含所有信息的向量如何创建新客户并将第一个项目存储在向量中作为fName,第二个作为lName存储,第三个作为acctNumber存储。向量中的第4项是新客户保存为fName等等。

我正在使用的文本文件的示例如下。
迈克尔杰克逊1 乔治琼斯2 布列塔尼·斯皮尔斯3岁

目标:上面的文件会实例化3个客户并设置他们的fName,lName和acctNumber,以供日后使用。

class CustomerType {
public:
    CustomerType(string f, string l, int a);
    string fName;
    string lName;
    int acctNumber;
    videoType chkdOut;
private:
};

CustomerType::CustomerType(string f, string l, int a) {
    fName = f;
    lName = l;
    acctNumber = a;
}

void createCustomer() {
    vector<string> myVector;
    ifstream myfile;
    myfile.open("custDat.txt");
    if (myfile.is_open())
    {
        while (!myfile.eof())
        {
            string tempString;
            getline(myfile, tempString);
            istringstream iss(tempString);
            string word;

            while (iss >> word) {
                myVector.push_back(word);
            }
        }
        myfile.close();
    }
    else
        cout << "Can't open file" << endl;
}

1 个答案:

答案 0 :(得分:0)

首先,向您的客户类添加一个构造函数,该构造函数将获取所需的信息:

class customerType {
public:
    customerType( string firstName, string lastName, int accountNumber );
    string fName;
    string lName;
    int acctNumber;
    videoType chkdOut;
private:
};

构造函数将以这种方式定义:

customerType( string firstName, string lastName, int accountNumber )
{
    fName = firstName;
    lName = lastName;
    acctNumber = accountNumber;
}

您必须创建一个方法来分割带有字符的字符串,以便从每一行获取不同的信息:

vector<string> split( string line, char c )
{
    const char *str = line.c_str();

    vector<string> result;

    do
    {
        const char *begin = str;

        while ( *str != c && *str )
            str++;

        result.push_back( string( begin, str ) );
    }
    while ( 0 != *str++ );

    return result;
}

然后,在创建客户的方法中,您可以使用该构造函数创建新对象,然后向客户返回向量:

vector<customerType> createCustomer() {

    // create a vector of customers:
    vector<customerType> customers;

    vector<string> myVector;
    ifstream myfile;
    myfile.open("custDat.txt");
    if (myfile.is_open())
    {
        while (!myfile.eof())
        {
            string tempString;
            getline(myfile, tempString);

            // Here you get a vector with each work in the line
            vector<string> splittedString = split(tempString, ' ');

            //Finally here you create a new customer
            customers.push_back(customerType(splittedString[0], splittedString[1], stoi(splittedString[2])));
        }
        myfile.close();
    }
    else
        cout << "Can't open file" << endl;

    return customers;
}

抱歉,我改变了你存储单词的方式。

stoi函数将字符串转换为整数。