Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
#1

Реализация мелких функций в hpp - C++

25.05.2014, 23:19. Просмотров 429. Ответов 5
Метки нет (Все метки)

Здравствуйте!

Есть шаблон класса Vector с кучей мелких функций, типа сумма, разность, operator+, проч.
Вопрос - стоит ли выносить их в отдельный cpp файл? Везде встречаю разные мнения. Повторюсь, что речь идет именно о мелких функция в одну строчку, типа:
C++
1
static Vector2 reverse(const Vector2& vector) { return Vector2(-vector._x, -vector._y); }
Я выношу все крупные функции >1 строки отдельно.

Насколько я понимаю, также рекомендуется оставлять inline-функции в hpp.

Кто как поступает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 23:19     Реализация мелких функций в hpp
Посмотрите здесь:

Перегрузка функций. Реализация функций - C++
Разработать функцию f(x) , которая возвращает младшую цифру натурального числа x . Вычислить с ее помощью значение выражения z= f(a) +...

Реализация функций - C++
Помогите, пожалуйста, реализовать методы классов (заголовки даны в biTree.g) Я плохо шарю, а завтра сдавать! Очень надо( Дан: biTree.h...

Реализация математических функций - C++
Где можно найти, как реализованы примитивные мат. функции такие, как sqrt, pow, sin, asin, log и другие и сколько примерно тактов...

Реализация перегруженных функций - C++
Нужна помощь по реализации перегруженных функций: int func (int * arr, int length, int number); int func (char * str, char ch); ...

Реализация функций интерфейса - C++
Есть класс с прототипами - интерфейс (верно?). Наследую от него два класса, А и В. Как мне в этих классах сделать разную реализацию...

Классы и реализация функций - C++
Дан класс Class Move { privare: double x; double y; public: //присваивает x, у значения a, b Move(double a=0, double...

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

Реализация функций из библиотеки math.h - C++
Нужно написать прогу реализующая 4 функции из библиотеки math.h с помощь классов!

Реализация класса функций принадлежности треугольника и трапеций - C++
Здравствуйте. Передо мной стоит такая задача. Необходимо реализовать задачу поиска регрессионной зависимости в условиях нечеткой логики....

Создание стека С++ и реализация основных для него функций - C++
Доброго времени суток.Нужна консольная программа,которая создаст стек с элементом-символьной строкой,и будет поддерживать функции...

Нужна работающая реализация хеш-функций ГОСТ - Blake или Blake2 - C++
Доброго времени суток! Возможно, вопрос тупой и не по теме, но может кто-нибудь поможет. Нужна работающая реализация хеш-функций ГОСТ...

3 мелких вопроса - C++
1. Если в базовом классе объявлена переменная с каким-то именем, то в производных классах такого имени не должно встречаться? 2. Если в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
25.05.2014, 23:26     Реализация мелких функций в hpp #2
Цитата Сообщение от relationer Посмотреть сообщение
Вопрос - стоит ли выносить их в отдельный cpp файл?
Цитата Сообщение от relationer Посмотреть сообщение
Есть шаблон класса Vector
шаблон в cpp?
Если да, то
Цитата Сообщение от relationer Посмотреть сообщение
Везде встречаю разные мнения
хватит по видео урокам учиться

Добавлено через 48 секунд
Цитата Сообщение от relationer Посмотреть сообщение
Повторюсь, что речь идет именно о мелких функция в одну строчку, типа:
где тут шаблон вектора?
Voivoid
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
25.05.2014, 23:26     Реализация мелких функций в hpp #3
Выноси все, даже однострочные - будет меньше зависимостей
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
25.05.2014, 23:36  [ТС]     Реализация мелких функций в hpp #4
шаблон в cpp?
Нет, конечно.
Даю кривой, некорректный, недописанный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef MATH_VECTOR2_HPP
#define MATH_VECTOR2_HPP
 
#include <string>
 
#include "base_vector2.hpp"
 
namespace Math
{
    template<typename T>
    class Vector2 : public BaseVector2<T>
    {
    public:
        using BaseVector2<T>::BaseVector2;
 
        void setX(T x) { this->_x = x; }
        void setY(T y) { this->_y = y; }
 
        void add(Vector2 other) { this->_x += other._x; this->_y += other._y; }
        template<typename K>
        void mul(K number)      { this->_x *= number;   this->_y *= number; }
 
        static Vector2 add(const Vector2& first, const Vector2& second) { return Vector2(first._x + second._x, first._y + second._y); }
        static Vector2 reverse(const Vector2& vector)                   { return Vector2(-vector._x, -vector._y); }
 
        Vector2 operator+(const Vector2& other) { add(other); return *this; }
        template<typename K>
        Vector2 operator*(K other) { mul(other); }
        Vector2 operator-() { return Vector2(-this->_x, -this->_y); }
        Vector2 operator-(const Vector2& other) { return Vector2(this->_x - other._x, this->_y - other._y); }
 
        operator std::string() const { return "{" + std::to_string(this->_x) + ";" + std::to_string(this->_y) + "}"; }
        operator bool()        const { return this->_x && this->_y; }
    };
}
 
#endif
Вопрос - стоит ли все эти МЕЛКИЕ функции выносить в cpp? Заслуживает ли функция add такой чести?
Просто из
C++
1
void add(Vector2 other) { this->_x += other._x; this->_y += other._y; }
получится
C++
1
2
3
4
5
6
template<typename T>
void Math::Vector2<T>::add(const Vector2<T>& other)
{
    this->_x += other._x;
    this->_y += other._y;
}
Тупо получится очень объемный, но абсолютно неинтересный cpp-файл. И попробуйте найти там реализацию какой-нибудь действительно крутой и нужной функции.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 1
26.05.2014, 01:10     Реализация мелких функций в hpp #5
Цитата Сообщение от relationer Посмотреть сообщение
Просто из
Код C++
1
void add(Vector2 other) { this->_x += other._x; this->_y += other._y; }
получится
Код C++
Мне кажется, что лучшая читабельность второго по сравнению с первым вариантом очевидна. Лично я пишу реализацию функции в .h либо если она шаблонная, либо она является inline, и мне лень разбираться с порядком ее определения в cpp файле (т.е. вызовется ли она раньше определения или нет - поди разбери, чего там дальше в коде изменяться будет). Ну и короткой я называю нечто типа
C++
1
2
3
int size() {
   return mSize;
}
В общем, в .h стоит описывать то, чье определение в .cpp вызывает некоторые трудности (тот же пример с inline) - такова моя точка зрения. Не стоит .h засорять совершенно лишним. Хотя тут, как говорится, на вкус и цвет...

P.S.
То, что они у тебя влазят в одну строку, не означает, что они однострочные) Строк в половине из них у тебя как раз две, просто короткие) Ваш кэп.

Добавлено через 20 минут
Цитата Сообщение от relationer Посмотреть сообщение
Просто из
Код C++
1
void add(Vector2 other) { this->_x += other._x; this->_y += other._y; }
получится
Код C++
Мне кажется, второе более читабельный, чем первый)
Лично я размещаю в .h определение функций либо когда они шаблонные (выбора нет), либо когда inline, и выбор места их определения в .cpp иногда вызывает трудности (там же важен порядок объявления/применения, если не ошибаюсь) - конечно, если их в самом начале не размещать.

Цитата Сообщение от relationer Посмотреть сообщение
И попробуйте найти там реализацию какой-нибудь действительно крутой и нужной функции.
Может, открою для тебя америку, но в большинстве современных IDE есть мало того что скрытие блоков кода, так еще и переход от объявления к определению (F12 в студии). Ну и что ты тогда скажешь о крупных проектах, где несколько десятков тысяч строк в файле (утрирую немного, обычно стараются все-таки все по своим местам размещать, в нескольких файлах) - там наверняка не вручную всегда ищут нужное определение)

PS.
у тебя в половине случаев функции получаются однострочные лишь потому, что ты две 'логические' строки пишешь в одну - ну не красиво, право слово.

PS2.
Блин, накатал целое сочинению, но при отправлении произошла ошибка и все пропало Так что получай урезанную версию)
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
26.05.2014, 01:25     Реализация мелких функций в hpp #6
Цитата Сообщение от relationer Посмотреть сообщение
получится
Получится из этого undefined reference, потому что пытаетесь вынести шаблон в отдельную единицу трансляции, а код шаблона должен быть доступен при инстанцировании
Yandex
Объявления
26.05.2014, 01:25     Реализация мелких функций в hpp
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru