在类中创建多个对象

时间:2017-08-22 03:48:36

标签: c++

我对如何将大量对象放入类中感到困惑。 因此,我们需要读入包含时间戳,员工ID,位置编号,事件代码的文件。输入的一个例子是:

10039865 WHITE99 1 OP
10039876 WHITE99 1 EN
10047500 PINK01 1 EN
10047624 SMITH01 3 EX
10047701 TAN07 2 EN
10048567 DIITZ01 2 OP
10048577 DIITZ01 2 OP
10048587 DIITZ01 2 OP

如何将这些信息设置为类中的对象? 这是我到目前为止所得到的,并且从这里开始。我们需要使用指向对象的指针数组来编写程序。

class Employee {

    long timestamp;
    string staffID;
    int locNum;
    string eventCode;

public:
    void setValues (long, string, int, string);

};

void Employee::setValues(long timestamp, string staffID, int locNum, string eventCode) {
    this->timestamp = timestamp;
    this->staffID = staffID;
    this->locNum = locNum;
    this->eventCode = eventCode;
}

1 个答案:

答案 0 :(得分:0)

我要省略一些事情,因为这看起来像是家庭作业,但这会让你走得更远。

需要注意的几件事情:

  1. 您没有使用构造函数。当然一个默认的构造函数很好,但它可以帮助你自己创建,特别是在开始时。
  2. 您应该使用vector代替array
  3. 例如:

    // Note that I'm making the members public - this is only for demonstration so I don't have to write getters and setters.
    class Employee {
        public:
        Employee(long, std::string, int, std::string);
        long timestamp;
        std::string staffID;
        int locNum;
        std::string eventCode;
    };
    
    // Here is the constructor.
    Employee::Employee(long l, std::string s, int n, std::string s2): timestamp(l), staffID(s), locNum(n),  eventCode(s2){}
    

    对于数组 - 坚持使用Employee指针向量可能更明智。如:

    typedef Employee * EmployeePointer;    
    EmployeePointer employeePtr;
    std::vector<EmployeePointer> employeeVec;
    

    然后.push_back()新员工使用带有指针的花哨的新构造函数。

    employeePtr = new Employee(181213, "Bob", 22, "OP");
    employeeVec.push_back(employeePtr);
    

    只需为新员工重复使用employeePtr

    employeePtr = new Employee(666732, "Sue", 21, "MA");
    employeeVec.push_back(employeePtr);
    

    您将看到创建了一个指向员工对象的指针的向量(大多数其他语言都称为数组):

    for(auto it = employeeVec.begin(); it != employeeVec.end(); it++){
        std::cout << (*it)->timestamp << " " << (*it)->staffID << " " << (*it)->locNum << " " << (*it)->eventCode << std::endl;
    }
    

    显示:

    181213 Bob 22 OP
    666732 Sue 21 MA
    

    如果由于某种原因无法使用vector ,那么使用数组实现这一点并没有那么不同,除了。

    EmployeePointer empPtrArr;
    
    // You'll need to know the size of your array of pointers or else dynamically allocate it, which I don't think you want to do.
    empPtrArr = * new EmployeePointer[2];
    

    你必须使用一个基本的for循环,而不是我使用的那个花哨的for(auto ... )

    最终评论:

    • 对于每个'新'都有'删除',否则你会有内存泄漏
    • 至少有一个#include我遗漏了你找出来,这应该不难发现