C ++ ООП: Какие функции поместить в класс? - PullRequest
6 голосов
/ 29 апреля 2010

Предположим, у меня есть класс а:

class a
{
public:
  void load_data( );
private:
  void check_data( );
  void work_data( );
  void analyze_data( );
}

Все эти функции что-то делают с классом или одним из его членов.

Однако эта функция:

bool validate_something( myType myData )
{
     if ( myData.blah > 0 && myData.blah < 100 )
     {
        return true;
     }
     return false;
}
  • Относится к классу и будет вызываться только им, поэтому он больше нигде не понадобится

  • Ничего не делает с классом или его членами - просто небольшая «служебная» функция

Где поставить validate_something? Внутри или за пределами класса?

Ответы [ 5 ]

11 голосов
/ 29 апреля 2010

Если функция

  • не требуется вне класса, и,
  • не требуется доступ к членам класса (или, возможно, имеет смысл как свободная функция с членами в качестве параметров)

тогда я склонен сделать это бесплатной функцией внутри частного пространства имен в файле реализации. Я предпочитаю не использовать частные функции, потому что они раскрывают детали реализации в заголовочном файле (и еще не сталкивались с проблемами Нила), и я предпочитаю избегать перекомпиляции для изменений реализации.

5 голосов
/ 29 апреля 2010

Сделать личным статическим членом класса. Я имел обыкновение делать этих не принадлежащих классу членов и помещать их в безымянное пространство имен в файле реализации, но кажется, что они почти всегда заканчивают тем, что должны быть членами класса (или должны быть перемещены в другое место - возможно, для проверки) библиотека, в вашем примере), так как код изменяется, так что теперь я почти всегда делаю их статическими членами.

Обратите внимание на использование «почти» в качестве квалификатора в этом ответе: -)

0 голосов
/ 29 апреля 2010

Как я понимаю, это не метод. Просто поместите его определение в файл cpp, выше определений методов, которые его используют. Если у вас есть все определения методов, встроенные в ваш класс, вы должны поместить прототип функции в заголовок над определением класса, но определение все равно может находиться в файле cpp.

0 голосов
/ 29 апреля 2010

Предполагая, что myType также является структурой / классом, почему бы вам не сделать validate_something методом myType?

0 голосов
/ 29 апреля 2010

Если этот метод является утилитой, которая используется только классом, я бы сделал его закрытым методом класса. Таким образом, он инкапсулирован и не «загрязняет» ваш публичный API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...