C ++访问私有向量值

时间:2011-10-15 18:07:01

标签: c++ vector private

我正在做餐馆管理计划。现在我正在尝试输出私人矢量数据并且卡住了。

所以我有一个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  

并将这些值存储到适当的向量中,例如,这将是矢量类别。

我还有一个.h文件,用于所有不同类型的东西,如Menu_Item.h,Recipe.h等。我将值存储到矢量中:

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_name值在Menu_Item.h中是私有的。如何访问私人数据?

2 个答案:

答案 0 :(得分:1)

您必须公开menu_items或制作公开的getter函数,如下所示。

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

然后说如果你有一个名为Menu的这种类型的Menu对象,你可以这样做:

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

答案 1 :(得分:1)

两个选项:

  1. 将您在Menu_item.h中的字段声明为public,而不是private
  2. 将字段保留为private,但创建public getters (and setters)以访问字段。