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

Классы и функции - C++

Восстановить пароль Регистрация
 
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 11:09     Классы и функции #1
Вопрос по поводу "идеологии" написания классов.
Как лучше писать реализации?

Есть ли смысл создавать функции, которые по сути аналогичны предназначению метода класса и просто вызывать их из методов?
Например, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void ker_foo( /* ... */ )
{
}
 
class Class
{
    public:
            Class()
            {
                /* ... */
            }
            
            Foo( /* ... */ )
            {
                ker_foo( /* ... */ );
            }
}
Или же все таки лучше писать все в реализации метода?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2010, 11:09     Классы и функции
Посмотрите здесь:

C++ Дружественные функции и классы
C++ Массивы классы и функции
Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов prin C++
C++ Классы. Программирование алгоритмов с использованием конструктора, деструктора, friend - функции инициализации set() и функции вывода результатов pri
Виртуальные функции и классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
01.03.2010, 11:20     Классы и функции #2
в реализации метода будет лучше.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 11:24  [ТС]     Классы и функции #3
Цитата Сообщение от Sekt Посмотреть сообщение
в реализации метода будет лучше.
Чем???
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
01.03.2010, 11:24     Классы и функции #4
C++
1
2
3
4
5
 Foo( /* ... */ )
                        {
                                ker_foo( /* ... */ );
                        }
 }
Это бывает неободимо если ниспользовать функцию Foo как специфическую оболочку
функции ker_foo( /* ... */ );
Я это применяю если использую библиотчечные функции,
Так сказать вызвал библиотчечную функцию и провёл свои специфические действия которые не может библиотченая функция, но может моя оболочка+библиотечная функция.
Короче замудрил.

Но в твоем случае я смысла пока не вижу, так как не видно общей картины,
поэтому и вывод у меня такой.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 11:31  [ТС]     Классы и функции #5
Допустим, есть набор готовых функций и для создания класса их нужно собственно только собрать в класс...
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
01.03.2010, 11:37     Классы и функции #6
Если у тебя среда которая поддреживает ассоциацию выбранного метода с нужным классом:
то есть поддреживает подсказки: тогда функции лучше собрать в класс так как название
функции в голове держать не надо.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 11:48  [ТС]     Классы и функции #7
А если это делается не только для сборки функций в кучку
Например есть функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <typename array>
void sort(array * a, int l, int r)
{
    int h;
    for(h = l; h <= (r-l)/9; h = 3*h+1);
    for( ; h > 0; h /= 3)
        for(int i = l+h; i <= r; i++)
        {
            int j = i;
            array v = a[i];
            while(j >= l+h && v < a[j-h])
            {
                a[j] = a[j-h];
                j -= h;
            }
            a[j] = v;
        }
}
и класс массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <class T>
class Array
{
public:
        Array(int size) { mptr = new T[size]; sorted = false; }
        ~Array()        { delete[] mptr; }
        
        void Sorting(uint left, uint right)
        {
            if(!sorted)
            {
                sort(mptr, left, right);
                sorted = true;
            }
        }
private:
        T * mptr;
        bool sorted;
};
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
01.03.2010, 11:51     Классы и функции #8
Не удачный пример: оболчка должна быть тоже шаблонной, иначе функция не предоставляет
абстрактность шаблонной функции: ограничивает одним типом: uint.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 11:57  [ТС]     Классы и функции #9
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Не удачный пример: оболчка должна быть тоже шаблонной, иначе функция не предоставляет
абстрактность шаблонной функции: ограничивает одним типом: uint.
Так она шаблонна, (uint'ами обозначены границы сортировки) ну или во всяком случае я хотел именно это и показать xD
А вообще играет это большую роль при написании, как организовывать класс?
Может быть с точки зрения неповторяемости кода лучше все в отдельных функциях, а потом их в оболочки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2010, 12:18     Классы и функции
Еще ссылки по теме:

классы,функции C++
Дружественные функции и классы C++
C++ Классы, указатель на функции

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

Или воспользуйтесь поиском по форуму:
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
01.03.2010, 12:18     Классы и функции #10
Которая в классе не шаблонная.
Шаблонный целый класс, это я не углядел.

Добавлено через 1 минуту
Которая в классе не шаблонная.
Точнее она тоже шаблонная ее инстацирование зависит от инстацирования объекта.
Yandex
Объявления
01.03.2010, 12:18     Классы и функции
Ответ Создать тему
Опции темы

Текущее время: 21:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru