2011-10-15 54 views
0

我在做一個餐館管理程序。現在我試圖輸出私人矢量數據,並陷入困境。C++訪問私有向量值

所以我有一個Menu.h

private: 
vector<Category> categories; 
vector<Menu_Item> menu_items; 
vector<Recipe> recipes; 
vector<Ingredient> ingredients; 
vector<Order> orders; 
vector<Order_Item> order_items; 

而且Menu.cpp

Menu.read() 
Menu.show() 

讀取功能從這樣

1010 Appetizers          
1901 Entrees          
1576 Desserts           
1320 Drinks 

並存儲這些值到一個文件中讀取適當的矢量,例如這個將是矢量類別。

我也有各種不同類型之類的東西,Menu_Item.h,Recipe.h等.h文件和I值存儲到向量像這樣:

menu_items.push_back(Menu_Item(meniID, catID, rID.... 

然而,在MENU_ITEM .h值爲

private: 
int menu_item_id; 
int cat_id; 
int recipe_id; 
string menu_item_name; 
double price; 

show()函數查詢用戶他/她想查看的內容。假設用戶希望看到像洋蔥圈這樣的特定菜單項。我不能做的是

if(menu_items[0].menu_item_name == "Onion Rings") 

因爲它說menu_Item.h中的menu_item_name值是私有的。我如何訪問私人數據?

回答

1

你必須公開menu_items或者像下面這樣製作一個公共的getter函數。

public: 
    vector<Menu_Item> get_menu_items(){ return menu_items;} 

然後,如果你有這種類型稱爲菜單的菜單對象,你可以做到這一點說:

if(Menu.get_menu_items()[0].menu_item_name == "Onion Rings") 

另一個可能的選擇是,你讓一個朋友類,如果另一個特定類需要訪問,儘管通常這不會是最好的設計決定。

在回答你能做到這一點的評論:

for(size_t n=0, n<menu_items.size()-1, ++n){  
    if(Menu.get_menu_items()[n].menu_item_name == "Onion rings") 
      cout << "something"; 
} 
+0

現在我的想法是做這樣的事情'代碼for(int n = 0,n Richard

+0

編輯我的回答 – shuttle87

+0

它說menu_item_name不可訪問 – Richard

1

兩個選項:

  1. 聲明你的領域中Menu_item.h爲public,不private
  2. 保留您的字段爲private,但創建publicgetters (and setters)以訪問字段。