C ++在向量类中调用私有数据成员

时间:2012-12-03 21:29:45

标签: c++

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

这是我的班级:

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;

如果没有,什么是apprpriate容器?列表清单是否更适合处理这组数据?

3 个答案:

答案 0 :(得分: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类中的所有数据成员作为encapsulation的私有数据成员。

然后你可以这样访问它们:

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

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

答案 1 :(得分: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访问器会更好,因为它允许您强制执行不变量/约束或更改各种实现细节。

至于访问私人会员:你不应该这样做。 It's technically possible, but don't do it.

答案 2 :(得分:0)

假设Struct是拼写错误。

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

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

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