С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
nar10z
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
1

Шаблонный класс и класс одномерный массив

11.04.2016, 09:40. Просмотров 954. Ответов 10
Метки нет (Все метки)

Задание: протестировать класс шаблон, с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял.
Созданные класс - одномерный массив из целых чисел.
Вот код, который я уже написал.
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <locale.h>
#include <windows.h>
#include <string>
#include <ctime>
using namespace std;
template<typename T>
class Arr
{
    T arr;
    T sizmax;
public:
    Arr(T sizmax)
    {
        arr= sizmax;
    }
    ~Arr(){}
    void print()
    {
        cout<<arr;
        cout<<"\nВсе элементы выведенны!\n";
    }
    Arr & operator = (const Arr& ob);
    Arr & operator * (const Arr& ob);
    Arr & operator [] (const Arr& ob);
};
class massiv
{
    private:
        int n = 0;
        int *arra;
    public:
        massiv()
        {
            cout<<"\n\nСработал конструктор\n\n";
        }
        ~massiv(){delete []arra; arra = NULL;}
        int insert_massiv(int *&arra, int n)
        {
 
            arra = new int[n];
            cout<<"\nЭлементы массива случайные числа.\n\n";
            srand(time(NULL));
            for(int i=1;i<=n;i++)
            {
                arra[i] = rand()%100+1;
            }
        }
        void out_array(int *&arra, int n)
        {
            for(int i = 1; i<=n; i++)
            {
                cout<<arra[i]<<"\t";
            }
            cout<<endl<<endl;
        }
 
 
};
 
 
 
main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int *ptr = NULL;
    int n;
    cout<<"Здрастье!"<<endl;
    cout<<"Введите количество элементов массива (до 10)--->>   ";
    cin>>n;
    massiv mass;
    mass.insert_massiv(ptr, n);
    mass.out_array(ptr, n);
    Arr<int> big(5);
    Arr<float> mini(4.256);
    Arr<string> str("kfasdj");
    Arr<class massiv> ma();
    str.print();
    mini.print();
    big.print();
    system("pause");
}
Добавлено через 6 минут
Само задание:
Порядок выполнения работы.
1. Создать шаблон заданного класса. Определить конструкторы, де-
структор, перегруженную операцию присваивания (“=”) и операции, за-
данные в варианте задания.
2. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для стандартных типов данных.
3. Выполнить тестирование.
4. Определить пользовательский класс, который будет использовать-
ся в качестве параметра шаблона. Определить в классе необходимые
функции и перегруженные операции.
5. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для пользовательского типа.
6. Выполнить тестирование
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2016, 09:40
Ответы с готовыми решениями:

Класс Matrix: реализовать шаблонный класс для двумерных массивов
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним...

Шаблонный класс целочисленный массив
Доброе утро. Не спалось, решил пошаманить. Нашел задачку, которая...

Шаблонный класс, определяющий двумерный динамический массив
Прошу помощи Задание: Создайте шаблонный класс, определяющий двумерный...

Создать шаблонный класс - двумерный динамический массив
Задание:Создать шаблонный класс - двумерный динамический массив. Тип элементов...

Шаблонный класс: динамический числовой массив увеличиваемого размера
привет помогите реализовать программу на шаблоны пожалйста: Реализовать...

10
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
11.04.2016, 10:00 2
Цитата Сообщение от nar10z Посмотреть сообщение
Само задание:
Порядок выполнения работы.
1. Создать шаблон заданного класса. Определить конструкторы, де-
структор, перегруженную операцию присваивания (“=”) и операции, за-
данные в варианте задания.
2. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для стандартных типов данных.
3. Выполнить тестирование.
4. Определить пользовательский класс, который будет использовать-
ся в качестве параметра шаблона. Определить в классе необходимые
функции и перегруженные операции.
5. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для пользовательского типа.
6. Выполнить тестирование
Что конкретно у Вас не получается сделать? Тут не биржа фриланса, кидайте код, который Вам не понятен, или что то в этом роде.
Цитата Сообщение от nar10z Посмотреть сообщение
с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял
Тут и я "не понял", что вы имеете в виду.
0
nmcf
6517 / 5746 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
11.04.2016, 10:03 3
Слово class убери из 78-й строки для начала.
0
mimicria
return (true);
1961 / 1098 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 10:17 4
Освобождение памяти в деструкторе, так почему выделение памяти не в конструкторе?
Цитата Сообщение от nar10z Посмотреть сообщение
Создать шаблон заданного класса
Цитата Сообщение от maxm Посмотреть сообщение
операции, заданные в варианте задания.
Что из этого заданный класс и какие операции заданы?
0
marat_miaki
165 / 150 / 90
Регистрация: 08.04.2013
Сообщений: 617
11.04.2016, 10:33 5
44 и 51 тоже подправь
C++
1
for(int i=1;i<=n;i++)
- 0 тоже считается
C++
1
 for(int i=0;i< n;++i)
0
nar10z
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 11:08  [ТС] 6
maxm, Надо создать шаблонный класс, в который будут поступать int, char, float. Но я не понимаю как сделать так чтобы туда поступил НЕ шаблонный класс, в моем случае этот класс одномерный массив.
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
class massiv
{
    private:
        int n = 0;
        int *arra;
    public:
        massiv()
        {
            cout<<"\n\nСработал конструктор\n\n";
        }
        ~massiv(){delete []arra; arra = NULL;}
        int insert_massiv(int *&arra, int n)
        {
 
            arra = new int[n];
            cout<<"\nЭлементы массива случайные числа.\n\n";
            srand(time(NULL));
            for(int i=1;i<=n;i++)
            {
                arra[i] = rand()%100+1;
            }
        }
        void out_array(int *&arra, int n)
        {
            for(int i = 1; i<=n; i++)
            {
                cout<<arra[i]<<"\t";
            }
            cout<<endl<<endl;
        }
 
 
};
После того как я передаю его в шаблонный класс, все нормально.
C++
1
Arr<class massiv> ma();
Но когда я пытаюсь применить метод вывода, у меня появляется ошибка.

Добавлено через 9 минут
mimicria, ну сделал я не в конструкторе. Шаблон заданного класса - это неведомая х**нь, которую я не понимаю. Ибо это класс - одномерный массив. Ибо еще что-то. Вот эти операции.
C++
1
2
 Arr & operator * (const Arr& ob);
    Arr & operator [] (const Arr& ob);
Добавлено через 30 секунд
marat_miaki, Я уже все исправил
0
mimicria
return (true);
1961 / 1098 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 11:41 7
Цитата Сообщение от nar10z Посмотреть сообщение
ну сделал я не в конструкторе.
Ну это неправильно. Выделением памяти и инициализацией значений элементов класса занимается конструктор, а не левые функции.
Цитата Сообщение от nar10z Посмотреть сообщение
Шаблон заданного класса - это неведомая х**нь, которую я не понимаю
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
Цитата Сообщение от nar10z Посмотреть сообщение
Но когда я пытаюсь применить метод вывода, у меня появляется ошибка.
Понятное дело, посмотрите что и как вы выводите. Для корректного вывода массива из класса надо перегружать оператор << для класса.
Цитата Сообщение от nar10z Посмотреть сообщение
Вот эти операции.
А где тело перегруженных операторов?
0
nar10z
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 11:45  [ТС] 8
Цитата Сообщение от mimicria Посмотреть сообщение
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
имеется ввиду та которая в задании.
Цитата Сообщение от mimicria Посмотреть сообщение
А где тело перегруженных операторов?
Я не понимаю даже что писать туда
0
mimicria
return (true);
1961 / 1098 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 12:00 9
Для начала вот, тогда уже и дальше можно будет разговаривать
0
nar10z
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 13:13  [ТС] 10
mimicria, это я уже прочитал все, знаю весь синтаксис.
0
mimicria
return (true);
1961 / 1098 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 13:41 11
Например, операция умножения на шаблонах. Компилятор знает, как перемножать int, float и т.д. Знает компилятор как умножать массивы? Нет. Шаблон класса нам позволит делать одни и те же операции (умножение) независимо от типа данных. Но для этого в типе ВАШ_КЛАСС должна быть перегружена операция умножения для массивов. Аналогично операция вывода operator<< должна быть перегружена для вашего класса.
Осталось только применить ваши знания в синтаксисе.
0
11.04.2016, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2016, 13:41

Как создать шаблонный класс-массив для хранения объектов?
Есть абстрактный класс Figure. Есть два производных от него класа: Field i...

Создать шаблонный класс - ассоциативный массив, используя std::vector
Задание выглядит так: &quot;Создать шаблонный класс – ассоциативный массив mymap с...

Создать шаблонный класс-контейнер Array, который представляет собой массив
Создать шаблонный класс-контейнер Array, который представляет собой массив,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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