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

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

Войти
Регистрация
Восстановить пароль
 
 
sodaily
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
#1

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

07.06.2016, 01:05. Просмотров 447. Ответов 20
Метки нет (Все метки)

есть класс шаблонный, но не могу объявить методы в 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
Посмотрите здесь:

Написать шаблонный класс List для работы с одноправленными списками в динамической памяти - C++
Для объектов класса List определить операции проверки списка на пустоту, добавления элемента в начало списка, в конец списка, подсчет...

Реализация Fifo с разными типами данных - C++
Доброго времени суток! Задача следующая: Есть абстрактный класс CData, от него наследуются классы CByte, CWord, CNumber. Нужно...

Матрица с разными типами данных в ней - C++
Мне нужно создать матрицу, которая содержала бы разные типы данных, содержащиеся, в ней. По сути обыкновенная таблица, только в виде...

Переписать программу с разными типами данных - C++
Тема: Использование указателей для работы со сложными типами данных Вот я хочу чтобы мне помогли переписать эту программу чтобы она...

Двухмерный массив с разными типами данных - C++
Доброе время суток. Есть задание Задание поменять нет возможности, да и самому доделать хочется. Есть кое какие наработки, и...

Сделать статический массив с разными типами данных - C++
Задача такова, есть ровно 60 магазинов. У каждого магазина по 6 параметров: 1) Адрес типа char 2) Заработок за сутки типа int 3)...

Список с разными типами данных, унаследованным от одного - C++
Доброго времени суток! У меня имеются унаследованные классы от одного , так же имеется vector&lt;общий_тип*&gt; arr. В программе создаются в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
878 / 617 / 125
Регистрация: 28.07.2012
Сообщений: 1,656
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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
878 / 617 / 125
Регистрация: 28.07.2012
Сообщений: 1,656
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
878 / 617 / 125
Регистрация: 28.07.2012
Сообщений: 1,656
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
878 / 617 / 125
Регистрация: 28.07.2012
Сообщений: 1,656
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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
39 / 39 / 8
Регистрация: 25.04.2014
Сообщений: 494
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++
Собственно само задание. Преобразовать квадратную матрицу, осуществив поворот элементов вокруг центра матрицы на 90 градусов против...

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

Шаблонный класс для обработки массива - C++
Реализовать шаблонный класс, который делает что-то с массивом( например: делит на первый элемент, ищет max и т д)

Как перегрузить оператор "+" для шаблонного класса, инстанцированного разными типами? - C++
подскажите как перегрузить оператор &quot;+&quot; для шаблона , инстанцированных разными типами ...

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


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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