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

Шаблонный класс для работы с разными типами данных и объявление методов в main - C++

Восстановить пароль Регистрация
 
 
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:05     Шаблонный класс для работы с разными типами данных и объявление методов в main #1
есть класс шаблонный, но не могу объявить методы в main и сделать длядругих типов когда делала через шаблонные функции, то программа работает только с int,как сделать для других не понимаю читала про шаблоны, только как это реализовать не хватает знаний
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "conio.h" 
#include "stdafx.h"
#include "conio.h" 
 
#include <iostream>
#include <iostream>
 using namespace std;
template <typename T>
class M
{ public
template <typename T>
void Sort( T* A, int n )//сортировка по возрастанию пузырек
{
    for( int k( 1 ); k <= n; k++ )
    {
        for( int i = 0; i < n - k; i++ )
        {
            if( A[ i ] > A[ i + 1 ] )
                swap( A[ i ], A[ i + 1 ] );//Функция swap меняет местами значения текущего эл и соседнего
        }
    }
}
 
template <typename T>
void Obr( T *A, int n )
 
{
    for( int j = 0; j < n; j++ )
    {
        for( int i = 0; i < n - 1; i++ )
        {
            if( A[ i ] > A[ i + 1 ] )
                swap( A[ i ], A[ i + 1 ] ); //Функция swap меняет местами значения
        }
    }
}
};
 
int main()
{
    setlocale( LC_ALL, "Russian" );
    int *A;
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    A = new int[ n ];
    for( int i( 0 ); i < n; i++ )
    {
        cout << "Введите " << i + 1 << " - элемент: ";
        cin >> A[ i ];
    }
    
    ASort( A, n );
    cout << "Отсортированный массив: ";
    for( int i( 0 ); i < n; i++ )
    {
        cout << A[ i ] << " ";
    }
    Obr( A, n );
    cout << "обратный порядок: ";
    for( int j = n - 1; j >= 0; j-- )
        cout << A[ j ] << " "; // Выводим массив в обратном порядке ( с 9 до 0 включительно ) 
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2016, 01:05     Шаблонный класс для работы с разными типами данных и объявление методов в main
Посмотрите здесь:

C++ Переписать программу с разными типами данных
Сделать статический массив с разными типами данных C++
C++ Написать шаблонный класс List для работы с одноправленными списками в динамической памяти
C++ Предусмотреть использование шаблонного класса для работы с различными типами данных
Реализация Fifo с разными типами данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
07.06.2016, 01:15     Шаблонный класс для работы с разными типами данных и объявление методов в main #2
Цитата Сообщение от sodaily Посмотреть сообщение
class M
Кто это? Зачем он тут?
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:17  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #3
nonedark2008, это класс, который я хотела сделать шаблонным(по заданию создать нужно шаблонный класс)
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 01:21     Шаблонный класс для работы с разными типами данных и объявление методов в main #4
так работает, но код ваш конечно огонь)
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
38
using namespace std;
 
template <typename T>
class M
{ public:
 
void Sort( T* A, int n )//сортировка по возрастанию пузырек
{
    for( int k( 1 ); k <= n; k++ )
    {
        for( int i = 0; i < n - k; i++ )
        {
            if( A[ i ] > A[ i + 1 ] )
                swap( A[ i ], A[ i + 1 ] );//Функция swap меняет местами значения текущего эл и соседнего
        }
    }
}
 
void Obr( T *A, int n )
 
{
    for( int j = 0; j < n; j++ )
    {
        for( int i = 0; i < n - 1; i++ )
        {
            if( A[ i ] > A[ i + 1 ] )
                swap( A[ i ], A[ i + 1 ] ); //Функция swap меняет местами значения
        }
    }
}
};
 
int main() {
int a[5] = { 31,4421,52,425,2};
        M<int> obj;
        obj.Sort(a, 5);
        obj.Obr(a, 5);
}
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
07.06.2016, 01:26     Шаблонный класс для работы с разными типами данных и объявление методов в main #5
sodaily, ок, имеется шаблонный класс с шаблонными методами (зачем два раза то?).
Чтобы вызвать метод класса, нужно создать объект этого класса...
Объекта никакого нет, зато есть вызов неопределенных функций ASort, Obr.

C++
1
А еще функция Obr внутри класса делает какую-то дичь...
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:31  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #6
tapochka, не выводиться никакой массив теперь, и нужно чтобы массив вводился с клавиатуры,что - то я сама запуталась уже

Добавлено через 1 минуту
nonedark2008, где я читала каждый метод отдельно делали шаблонным, создавала объект класса, и пыталась вызвать, в итоге было дофига ошибок,
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А еще функция Obr внутри класса делает какую-то дичь...
по идеи функция должа сортировать массив в обратном порядке
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
07.06.2016, 01:43     Шаблонный класс для работы с разными типами данных и объявление методов в main #7
Цитата Сообщение от sodaily Посмотреть сообщение
по идеи функция должа сортировать массив в обратном порядке
Для этого достаточно взять функцию Sort и поменять в ней знак > на <.

Не по теме:


Цитата Сообщение от sodaily Посмотреть сообщение
где я читала каждый метод отдельно делали шаблонным, создавала объект класса, и пыталась вызвать, в итоге было дофига ошибок
Страшная была, наверно, сказка.
И после этого ты решила, что, если добавить еще больше шаблонов, не содавая объекта данного класса, то все станет лучше? Ну да, ошибок будет меньше, но работать оно от этого уж точно не станет.

sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:49  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #8
nonedark2008, как было описано в том примере так и пыталась.А дальше в main ничего изменитье могу чобы работало это с любыми типами
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
07.06.2016, 01:53     Шаблонный класс для работы с разными типами данных и объявление методов в main #9
Цитата Сообщение от tapochka Посмотреть сообщение
M<int>
Вместо int пишешь любой тип, создаешь массивы этого же типа и сортируешь.
Главное, чтобы элементы данного типа можно было сравнивать...
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:01  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #10
nonedark2008, в каком конкретно месте это делать? и тот код который описали выше, не подходит и не работает.
Цитата Сообщение от sodaily Посмотреть сообщение
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
int main()
{
* * setlocale( LC_ALL, "Russian" );
* * int *A;
* * int n;
* * cout << "Введите размерность массива: ";
* * cin >> n;
* * A = new int[ n ];
* * for( int i( 0 ); i < n; i++ )
* * {
* * * * cout << "Введите " << i + 1 << " - элемент: ";
* * * * cin >> A[ i ];
* * }
Sort( A, n );
* * cout << "Отсортированный массив: ";
* * for( int i( 0 ); i < n; i++ )
* * {
* * * * cout << A[ i ] << " ";
* * }
* * Obr( A, n );
* * cout << "обратный порядок: ";
* * for( int j = n - 1; j >= 0; j-- )
* * * * cout << A[ j ] << " "; // Выводим массив в обратном порядке ( с 9 до 0 включительно ) 
* * _getch();
* * return 0;
}
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 02:03     Шаблонный класс для работы с разными типами данных и объявление методов в main #11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Вместо int пишешь любой тип, создаешь массивы этого же типа и сортируешь.
Главное, чтобы элементы данного типа можно было сравнивать...
вы что-то путаете... класс вы без указания параметра не создатие если только он по дефолту не стоит
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:14  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #12
tapochka, пробую сделать как вы описали,но не выходит(неужели придется весь main переписывать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
 M<int>A;
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    A = new int[ n ];***
    for( int i( 0 ); i < n; i++ )
    {
        cout << "Введите " << i + 1 << " - элемент: ";
        cin >> A[ i ];
    }
 
    M.Sort( A, n );***
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 02:16     Шаблонный класс для работы с разными типами данных и объявление методов в main #13
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
int main()
{
    setlocale( LC_ALL, "Russian" );
    int *A;
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    A = new int[ n ];
    for( int i( 0 ); i < n; i++ )
    {
        cout << "Введите " << i + 1 << " - элемент: ";
        cin >> A[ i ];
    }
    
    M<int> obj;
    obj.Sort( A, n );
    cout << "Отсортированный массив: ";
    for( int i( 0 ); i < n; i++ )
    {
        cout << A[ i ] << " ";
    }
    obj.Obr( A, n );
    cout << "обратный порядок: ";
    for( int j = n - 1; j >= 0; j-- )
        cout << A[ j ] << " "; // Выводим массив в обратном порядке ( с 9 до 0 включительно ) 
    _getch();
    return 0;
}
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:26  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #14
tapochka,СПАСИБО БОЛЬШОЕ,но если делаю вот так
C++
1
2
M<float>obj1;
obj1.Sort(A,n);
подчеркивает А,может ли это быть из за этой строчки
Цитата Сообщение от tapochka Посмотреть сообщение
int *A;
и как избавиться от такого?
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 02:29     Шаблонный класс для работы с разными типами данных и объявление методов в main #15
C++
1
2
3
4
5
6
7
8
9
10
float *A;
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    A = new float[ n ];
    for( int i( 0 ); i < n; i++ )
    {
        cout << "Введите " << i + 1 << " - элемент: ";
        cin >> A[ i ];
    }
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:33  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #16
tapochka, я уже наверное надоела вам, но если я дополняю код вещественным типом
C++
1
2
int *A;
    float *A;
то дальше A=new float [n] не видит что А это float
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 02:45     Шаблонный класс для работы с разными типами данных и объявление методов в main #17
Цитата Сообщение от sodaily Посмотреть сообщение
но если я дополняю код вещественным типом
нельзя так создавать, тип один раз на момент компиляции создается только, либо int либо float
вы конечно жжете
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 17:43  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #18
tapochka, и в чем тогда смысл шаблона? каждый раз придется переписывать код для разных типов?
tapochka
30 / 30 / 7
Регистрация: 25.04.2014
Сообщений: 413
07.06.2016, 21:50     Шаблонный класс для работы с разными типами данных и объявление методов в main #19
sodaily, шаблоны дают полиморфизм времени компиляции... но у вас массив A то из элементов либо int либо float... если я конечно правильно понял все
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2016, 21:53     Шаблонный класс для работы с разными типами данных и объявление методов в main
Еще ссылки по теме:

C++ Двухмерный массив с разными типами данных
Матрица с разными типами данных в ней C++
Список с разными типами данных, унаследованным от одного C++

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

Или воспользуйтесь поиском по форуму:
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 21:53  [ТС]     Шаблонный класс для работы с разными типами данных и объявление методов в main #20
tapochka, мне подсказали сделать отдельный метод
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
void foo (T*A,int n)
 { 
     setlocale( LC_ALL, "Russian" );
 
     int n;
    cout << "Введите размерность массива: ";
    cin >> n;
    for( int i( 0 ); i < n; i++ )
    {
        cout << "Введите " << i + 1 << " - элемент: ";
        cin >> A[ i ]; 
        A = new T[ n ];
    
    M <T> obj;
    obj.Sort( A, n );
    cout << "Отсортированный массив: ";
    for( int i( 0 ); i < n; i++ )
    {
        cout << A[ i ] << " ";
    }
    obj.Obr(A, n );
    cout << "обратный порядок: ";
    for( int j = n - 1; j >= 0; j-- )
        cout << A[ j ] << " "; 
    }
а в мэин написать foo<int>();
foo<float>();,но это как то не работает в main
Yandex
Объявления
07.06.2016, 21:53     Шаблонный класс для работы с разными типами данных и объявление методов в main
Ответ Создать тему
Опции темы

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