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;
}

ゲッター/セッターのアクセサーがいる場合は、メンバーを公開したほうがよいと主張する人もいます。不変条件/制約を適用したり、さまざまな実装の詳細を変更したりできるため、ゲッター/セッターアクセサーを使用する方がよいと主張する人もいます。

プライベートメンバーへのアクセスに関しては、そうすべきではありません。技術的には可能ですが、実行しないでください。

于 2012-12-03T21:35:25.520 に答える
0

Structタイプミスだと仮定します。

Data構造体の名前を削除することで、構造体をEmployee匿名にすることができます。これにより、でデータに直接アクセスできるようになりますがExample[0].Identification_Number、これを正しく機能させるには、構造体を公開する必要もあります。

Employeeもう1つのオプションは、構造体を完全に削除し、データをクラスのメンバーとして直接保存することです。

3番目のオプションはconst、構造体からデータを返すアクセサメソッドを追加することです。

于 2012-12-03T21:35:56.527 に答える