Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
1

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

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

Author24 — интернет-сервис помощи студентам
есть класс шаблонный, но не могу объявить методы в 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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2016, 01:05
Ответы с готовыми решениями:

Объявление переменной с разными типами
Здравствуйте! Подскажите пожалуйста , не пойму почему в строке 44 ( программа рабочая ) , ...

Промежуточный класс для реализации методов работы с базой данных.
Кто-нить писал промежуточный класс для реализации методов работы с базой данных? Если не жалко,...

Как сделать перегрузку функции для работы с разными типами элементов управления
В элементе управления функция должна делать первую букву заглавной. Написал вот такое ...

Итератор для двусвязного списка с разными типами данных
Задание было: составить двусвязный список с возможностью добавления,редактирования и удаления...

20
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.06.2016, 01:15 2
Цитата Сообщение от sodaily Посмотреть сообщение
class M
Кто это? Зачем он тут?
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:17  [ТС] 3
nonedark2008, это класс, который я хотела сделать шаблонным(по заданию создать нужно шаблонный класс)
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 01:21 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);
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.06.2016, 01:26 5
sodaily, ок, имеется шаблонный класс с шаблонными методами (зачем два раза то?).
Чтобы вызвать метод класса, нужно создать объект этого класса...
Объекта никакого нет, зато есть вызов неопределенных функций ASort, Obr.

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

Добавлено через 1 минуту
nonedark2008, где я читала каждый метод отдельно делали шаблонным, создавала объект класса, и пыталась вызвать, в итоге было дофига ошибок,
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А еще функция Obr внутри класса делает какую-то дичь...
по идеи функция должа сортировать массив в обратном порядке
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.06.2016, 01:43 7
Цитата Сообщение от sodaily Посмотреть сообщение
по идеи функция должа сортировать массив в обратном порядке
Для этого достаточно взять функцию Sort и поменять в ней знак > на <.

Не по теме:


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

0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 01:49  [ТС] 8
nonedark2008, как было описано в том примере так и пыталась.А дальше в main ничего изменитье могу чобы работало это с любыми типами
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
07.06.2016, 01:53 9
Цитата Сообщение от tapochka Посмотреть сообщение
M<int>
Вместо int пишешь любой тип, создаешь массивы этого же типа и сортируешь.
Главное, чтобы элементы данного типа можно было сравнивать...
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:01  [ТС] 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;
}
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 02:03 11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Вместо int пишешь любой тип, создаешь массивы этого же типа и сортируешь.
Главное, чтобы элементы данного типа можно было сравнивать...
вы что-то путаете... класс вы без указания параметра не создатие если только он по дефолту не стоит
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:14  [ТС] 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 );***
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 02:16 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;
}
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:26  [ТС] 14
tapochka,СПАСИБО БОЛЬШОЕ,но если делаю вот так
C++
1
2
M<float>obj1;
obj1.Sort(A,n);
подчеркивает А,может ли это быть из за этой строчки
Цитата Сообщение от tapochka Посмотреть сообщение
int *A;
и как избавиться от такого?
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 02:29 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 ];
    }
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 02:33  [ТС] 16
tapochka, я уже наверное надоела вам, но если я дополняю код вещественным типом
C++
1
2
int *A;
    float *A;
то дальше A=new float [n] не видит что А это float
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 02:45 17
Цитата Сообщение от sodaily Посмотреть сообщение
но если я дополняю код вещественным типом
нельзя так создавать, тип один раз на момент компиляции создается только, либо int либо float
вы конечно жжете
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 17:43  [ТС] 18
tapochka, и в чем тогда смысл шаблона? каждый раз придется переписывать код для разных типов?
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
07.06.2016, 21:50 19
sodaily, шаблоны дают полиморфизм времени компиляции... но у вас массив A то из элементов либо int либо float... если я конечно правильно понял все
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
07.06.2016, 21:53  [ТС] 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
0
07.06.2016, 21:53
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2016, 21:53
Помогаю со студенческими работами здесь

Шаблонный класс. Объявление и реализация
vc++ очень много ругается. Понимаю что где-то в определении метода. И вся проблема в том, что...

Сортировка в файле с разными типами данных (таблица рекордов для игры)
я сделал запись в файл таким образом: пример: Сложный уровень, 1, cetx Сложный уровень, 13, eysy...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод...

Разработать шаблонный класс Deque c разными методами
Разработать шаблонный класс Deque, который имеет следующие методы: - addBegin(n) - добавление в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru