Методы C ++ в объекте или статические - PullRequest
1 голос
/ 05 апреля 2019

Так что C ++ поддерживает объектную ориентацию, но не заставляет ее использовать.И давайте приведем пример: у нас есть класс Fruit с некоторыми сложными данными.И мы хотим рассчитать калории

Вариант 1: Мы помещаем метод непосредственно в класс: public: int calculateCalories();

Вариант 2: Мы помещаем его в Fruit.cpp, но не в сам класс: int calculateCalories(Fruit f);

-> Что считается лучшей практикой?

1 Ответ

4 голосов
/ 05 апреля 2019

Что считается лучшей практикой?

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

См. Как функции, не являющиеся членами, улучшают инкапсуляцию , если вы можете найти время.Это немного длинно.

Простой пример:

class Circle
{
   public:
      Circle(double r = 0) : radius(r) {}

      double getRadius() const { return radius; }

   priviate:
      double radius;
};

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

double area(Circle const& c)
{
   double r = c.getRadius();
   return M_PI*r*r;
}

double circumference(Circle const& c)
{
   double r = c.getRadius();
   return 2*M_PI*r;
}

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

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