Функция add вырожденной получилась. Зачем отдельно добавлять в map объект, если map и так его добавит автоматически (если его ещё нет), в том месте где мы попытаемся получить этот объект через [] и поменять его?
Можно смело выбросить функцию add без всякой потери смысла.
Получение объекта из множества
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 20
- Зарегистрирован: 12 ноя 2013, 21:50
Нет, она мне нужна... Хотя бы что бы хранить объекты, их количество. Если я захочу посмотреть всех менеджеров, я выведу mapManager и все, иначе как я узнаю их кол-во? Вести доп. переменную и выводить в цикле по их количеству? Тогда у меня будет запрашивать инфу по менеджеру перед выводом. Вот конструктор менеджера:
В момент создания объекта я заполняю инфу по нем.
Или Вы не об этом?
Код: Выделить всё
class Manager
{
string name;
string phoneNumber;
int id;
static int count;
set<Order> orderSet;
set<Reservation> reservationSet;
public:
Manager();
...
}
Manager::Manager()
{
string _name, _phoneNumber;
cout<<"Input name: ";
cin>>_name;
cout<<"\nInput phone number: ";
cin>>_phoneNumber;
cout<<endl;
name=/*"none"*/_name;
phoneNumber=/*"none"*/_phoneNumber;
id=++count;
}
Или Вы не об этом?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Я, просто, не ожидал, что внутри конструктора будет ввод данных
Не делается так - это плохой тон. Ввод данных должен быть оторван от бизнес логики.
Тогда уж по крайней мере вот так сделай:
Негоже брать ключ для мэпа из её же размера. Мы ведь не знаем в функции add, как внутри вычисляется id менеджера. Эти знания должны быть только в одном месте - внутри конструктора. Распихивать их по разным местам - это увеличение связности кода.

Тогда уж по крайней мере вот так сделай:
Код: Выделить всё
template <class T> void add()
{
T obj;
getMap<T>().insert(pair<int,T>(obj.getId(), obj));
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 20
- Зарегистрирован: 12 ноя 2013, 21:50
Хорошо, спасибо)
От блин, ввод данных в конструкторе смотрелось как-то более элегантно, красиво и проще, чем вводить их выше и передавать по параметру...
Лучше переделать?)
От блин, ввод данных в конструкторе смотрелось как-то более элегантно, красиво и проще, чем вводить их выше и передавать по параметру...
Лучше переделать?)
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну обычно ввод отдельно, а бизнес логика отдельно. Хотя для учебного примера это не критично, наверное.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 20
- Зарегистрирован: 12 ноя 2013, 21:50
Ну это не только учебный пример)
Я хочу что бы у меня было что показать работодателям, когда начну искать работу... Если им захочется посмотреть на мои проекты)
Я хочу что бы у меня было что показать работодателям, когда начну искать работу... Если им захочется посмотреть на мои проекты)
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Тогда лучше вынести чтение данных из конструктора. А ещё лучше сделать, чтобы они не с клавиатуры вводились, а из конфиг файла какого-нибудь. Ведь по смыслу они должны быть заполнены один раз и потом использоваться. Как-то странно их вводить каждый раз при запуске программы. Такой подход и более правилен, и заодно позволит разобраться с другими аспектами (например, чтение из файла).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.