2

我正在寻找一个标准向量形式的类。我一直在编写一些带有实现集合而不是向量的类的程序,所以我有点困惑。

这是我的课:

class Employee
{

private:

  Struct Data
  {
unsigned Identification_Number;
// Current capacity of the set

unsigned Department_Code;
// Department Code of employee

unsigned Salary;
// Salary of employee

str Name;
// Name of employee
  }

如果我想稍后调用私有数据成员,我可以执行以下操作吗?

vector<Employee> Example;

//Assume there's data in Example

cout << Example[0].Identification_Number;
cout << Example[3].Salary;

如果不是,那么合适的容器是什么?列表列表会更好地处理这组数据吗?

4

3 回答 3

1

您按原样提供的代码是不可能的,但通过一些修改,您可以使其工作:

class Employee
{
public:
    unsigned GetID() const               { return Identification_Number; }
    unsigned GetDepartment() const       { return Department_Code; }
    unsigned GetSalary() const           { return Salary; }
    // Assuming you're using std::string for strings
    const std::string& GetString() const { return string; }
private:
    unsigned Identification_Number; // Current capacity of the set
    unsigned Department_Code;       // Department Code of employee
    unsigned Salary;                // Salary of employee
    string Name;                    // Name of employee
};

请注意,Data在这种情况下,正如您所介绍的那样,该结构是完全多余的。我刚刚将所有数据成员放在Employee类本身作为封装的私有数据成员。

然后您可以通过以下方式访问它们:

std::vector<Employee> Example; //Assume there's data in Example
// ...
cout << Example[0].GetID();
cout << Example[3].GetSalary();

Employee大概您会以某种方式将各个变量设置为类中的正确值。

于 2012-12-03T21:34:21.847 回答
0

一种常见的方法是访问函数:

#include <iostream>

class Employee
{
public:
    void setID(unsigned id)
    {
        Identificaiton_Number = id;
    }

    unsigned getID()
    {
        return Identificaiton_Number;
    }

private:
    unsigned Identification_Number;
    // Current capacity of the set

    unsigned Department_Code;
    // Department Code of employee

    unsigned Salary;
    // Salary of employee

    str Name;
    // Name of employee
};

int main()
{
    Employee e;

    e.setID(5);
    std::cout << e.getID() << std::endl;
}

有人争辩说,如果您有 getter/setter 访问器,您不妨将成员公开。其他人认为最好有 getter/setter 访问器,因为它允许您强制执行不变量/约束或更改各种实现细节。

至于访问私人成员:你不应该这样做。这在技术上是可行的,但不要这样做。

于 2012-12-03T21:35:25.520 回答
0

假设Struct是一个错字。

您可以通过删除结构的名称使Data结构匿名。Employee这将允许您直接访问数据,Example[0].Identification_Number但是要使其正常工作,您还必须将结构公开。

另一种选择是完全删除结构并将数据直接存储为Employee类的成员。

第三种选择是添加const访问器方法以从结构中返回数据。

于 2012-12-03T21:35:56.527 回答