Когда / если сделать не виртуальную функцию функцией-членом

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

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

Оправдано ли когда-нибудь сделать не виртуальную функцию членом?

-2

Решение

Это не только оправдано, это типичный сделать не виртуальные функции членами класса, если они оперируют данными в этом классе.

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

Это не то, что изменилось в «современном» C ++. Так было всегда.

1

Другие решения

Одним из основных принципов ООП является инкапсуляция. Вы берете некоторые данные, которые логически вместе, и делаете из них класс. Расширением той же логической группировки будут функции, манипулирующие этими данными. Такие функции должны быть сделаны функциями-членами. Наличие у них свободных функций, которые являются классом, противоречит принципу инкапсуляции.

1

По вопросам рекламы [email protected]