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

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

07.06.2016, 01:05. Показов 5785. Ответов 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 ( программа рабочая ) , при записи TableFun a = new ...

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2016, 21:53
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
Введение в Dapr для разработчиков .NET
UnmanagedCoder 18.03.2025
Разработка распределенных систем никогда не была настолько востребованной и одновременно такой сложной. Если вы . NET разработчик, то наверняка сталкивались с необходимостью жонглировать обнаружением. . .
Собеседование по Spring Boot: продвинутые вопросы и ответы
Javaican 18.03.2025
Собеседования на позиции старших разработчиков и архитекторов требуют глубокого понимания внутренних механизмов Spring Boot, нюансов конфигурирования, подходов к оптимизации и построению сложных. . .
Перечисления в TypeScript: использование и лучшие практики
run.dev 18.03.2025
Пишете код и устали от разбросанных по проекту "волшебных" строк и чисел? Знакомая ситуация: где-то в глубине кода притаилась строка "ADMIN", а в другом месте используется "admin". И вот уже. . .
Фишки Kotlin, которые все любят
Javaican 18.03.2025
Помню, как скептически относился к появлению "ещё одного языка для JVM" — мол, зачем нам что-то новое, когда есть Java? Но первый же проект на Kotlin заставил меня пересмотреть свое мнение. Код стал. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер