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

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

07.06.2016, 01:05. Показов 5775. Ответов 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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Простая нейросеть на КуМир: Создание и обучение
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
Исполнитель Водолей в КуМир: Решение задач
EggHead 16.03.2025
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой. . .
Исполнитель Чертежник в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или. . .
Исполнитель Робот в КуМир: Решение задач
EggHead 16.03.2025
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного. . .
Исполнитель Черепаха в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда. . .
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер