2016-11-05 2 views
3

У меня есть поле static const std::vector<SomeType> в моем классе. У меня есть два метода private, которые используют это поле (методы поиска). Они не используют других членов моего класса. Должны ли они определяться как static или обычные методы?статический метод или нестатический метод с использованием статического поля

Что мне делать? Каковы преимущества/недостатки?

ответ

3

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

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

+0

Часть, начинающаяся с 'потому что' является * non sequitur *. Можно ли переопределить статические методы, не имеет никакого отношения к тому, можно ли их вызвать из виртуальных методов. – EJP

+0

@EJP Я не говорил, что статические функции-члены нельзя переопределить, все, что я говорю, состоит в том, что статические функции-члены не могут переопределять виртуальные функции из базового класса. Другими словами, если вы пишете функцию в качестве переопределения для виртуальной функции базового класса, вам нужно сделать ее нестатической, даже если она обращается к только статическим членам. – dasblinkenlight

Смежные вопросы