C ++ Доступ к закрытым векторным значениям - PullRequest
0 голосов
/ 15 октября 2011

Я делаю программу управления рестораном. Сейчас я пытаюсь вывести частные векторные данные и застреваю.

Итак, у меня есть 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 ]

1 голос
/ 15 октября 2011

Два варианта:

  1. Объявите ваши поля в Menu_item.h как public, а не private.
  2. Оставьте ваши поля как private, но создайте public геттеры (и сеттеры) для доступа к полям.
1 голос
/ 15 октября 2011

Вы должны сделать menu_items общедоступным или сделать публичную функцию получения, как показано ниже.

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