@LamerFromSpace
Студент-быдлокодер

Как использовать вектор классов?

Есть класс c методами sortByField и search, сортируют и ищут значения в векторе юзеров соответственно.
class User
{
public:
  void sortByField(vector<User>& arr, int field);
  void search(vector<User>& arr, int field, string str);
  ...
private:
	string fullName;
	string birthDate;
  ...


Сам вектор объявляется в main файле. Что то мне кажется этот подход кривым, ведь метод класса работает с вектором, которого в самом классе нет, может вектор в сам класс перекинуть как поле?
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Ну только такие методы не должны классу user принадлежать. Было бы лучше создать новый класс, вроде Database, который используется для хранения пользователей. А уж у этого класса можно сделать методы вроде find или sort. Только сигнатура этих методов уже разумеется никаких векторов не содержит: вектор -- это деталь реализации в данном случае, которая может быть изменена потом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
h0w4rd
@h0w4rd
Python dev.
Как я понимаю, функции должны работать с данными пользователя (т.е. vector<User>& arr). Значит нужно вынести это как поле и желательно не забыть про добавление нового параметра в инициализацию класса. Ну а иначе, если эти функции просто сортируют векторы или что там, то убрать их из класса.
Ответ написан
Комментировать
@vanyamba-electronics
class UserVector : public std::vector<User>
{
   typedef std::vector<User> ParentT;
public:
   UserVector& sort(int field);
   ParentT::size_type find(int field, const std::string& request);
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы