【问题标题】:C++ Accessing private vector valuesC++ 访问私有向量值
【发布时间】:2011-10-15 18:07:01
【问题描述】:

我正在做一个餐厅管理项目。现在我正在尝试输出私有矢量数据并且卡住了。

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

read 函数从这样的文件中读取数据

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 中是私有的。如何访问私人数据?

【问题讨论】:

    标签: c++ vector private


    【解决方案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";
    }
    

    【讨论】:

    • 现在我的想法是做这样的事情code for(int n=0, n&lt;menu_items.size()-1, ++n){ if(menu_items[i].menu_item_name == "Onion rings") cout &lt;&lt; "something"; }。我怎样才能做这样的事情或使用上述功能?
    • 它说 menu_item_name 无法访问
    • 公开 menu_item_name。或者创建一个 get_menu_item_name() getter 函数。
    • 对不起,我迷路了。我正在尝试使用 for 循环,但无法公开这些私有变量中的任何一个。所以我做了这个code string get_mi_name(){ return menu_item_name;} 然后我有vector&lt;Menu_Item&gt; get_menu_items()。但是我不知道如何得到任何东西。你能帮我解决这个问题吗?
    • @Richard:Menu_Item 类应该有一个public: const string&amp; get_name() const {return menu_item_name;} 然后在你的循环中而不是使用menu_items[i].menu_item_name 你输入menu_items[i].get_name() 来代替。
    【解决方案2】:

    两种选择:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 2012-05-09
      相关资源
      最近更新 更多