2012-12-03 59 views
2

我在創建一個標準向量形式的類。我一直在用一些實現了集合而不是向量的類來編寫一些程序,所以我有點困惑。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容器是什麼?列表清單是否更適合處理這組數據?

+1

爲什麼要將'struct'私有化,當你想公開可用?或者是'Struct Data {'錯字? – Cornstalks

+2

爲什麼即使有'Data'結構呢?爲什麼不直接將所有'Data'的成員放在Employee類中? –

+0

這裏的容器是完全不相關的,你似乎完全不知道如何訪問私人會員。當然,答案是,你不會想;這就是整個問題。 – GManNickG

回答

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類中他們正確的價值觀單個變量莫名其妙。

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.

0

假設Struct是一個錯字。

通過刪除結構體的名稱,可以使中的Data結構變爲匿名。 這將允許您直接使用Example[0].Identification_Number訪問數據,但爲了使其正常工作,您還必須公開該結構。

另一種選擇是完全刪除結構並直接存儲數據作爲Employee類的成員。

第三個選項是添加const訪問器方法來返回結構中的數據。