1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
1

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

11.04.2016, 09:40. Показов 4030. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 09:40
Ответы с готовыми решениями:

Шаблонный класс массив
Здравствуйте,необходимо создать шаблонный класс массив и в нем перегрузить некоторые операторы. У...

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

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

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

10
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
11.04.2016, 10:00 2
Цитата Сообщение от nar10z Посмотреть сообщение
Само задание:
Порядок выполнения работы.
1. Создать шаблон заданного класса. Определить конструкторы, де-
структор, перегруженную операцию присваивания (“=”) и операции, за-
данные в варианте задания.
2. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для стандартных типов данных.
3. Выполнить тестирование.
4. Определить пользовательский класс, который будет использовать-
ся в качестве параметра шаблона. Определить в классе необходимые
функции и перегруженные операции.
5. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для пользовательского типа.
6. Выполнить тестирование
Что конкретно у Вас не получается сделать? Тут не биржа фриланса, кидайте код, который Вам не понятен, или что то в этом роде.
Цитата Сообщение от nar10z Посмотреть сообщение
с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял
Тут и я "не понял", что вы имеете в виду.
0
7169 / 6143 / 2803
Регистрация: 14.04.2014
Сообщений: 26,469
11.04.2016, 10:03 3
Слово class убери из 78-й строки для начала.
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 10:17 4
Освобождение памяти в деструкторе, так почему выделение памяти не в конструкторе?
Цитата Сообщение от nar10z Посмотреть сообщение
Создать шаблон заданного класса
Цитата Сообщение от maxm Посмотреть сообщение
операции, заданные в варианте задания.
Что из этого заданный класс и какие операции заданы?
0
465 / 368 / 175
Регистрация: 08.04.2013
Сообщений: 1,581
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
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
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 11:41 7
Цитата Сообщение от nar10z Посмотреть сообщение
ну сделал я не в конструкторе.
Ну это неправильно. Выделением памяти и инициализацией значений элементов класса занимается конструктор, а не левые функции.
Цитата Сообщение от nar10z Посмотреть сообщение
Шаблон заданного класса - это неведомая х**нь, которую я не понимаю
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
Цитата Сообщение от nar10z Посмотреть сообщение
Но когда я пытаюсь применить метод вывода, у меня появляется ошибка.
Понятное дело, посмотрите что и как вы выводите. Для корректного вывода массива из класса надо перегружать оператор << для класса.
Цитата Сообщение от nar10z Посмотреть сообщение
Вот эти операции.
А где тело перегруженных операторов?
0
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 11:45  [ТС] 8
Цитата Сообщение от mimicria Посмотреть сообщение
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
имеется ввиду та которая в задании.
Цитата Сообщение от mimicria Посмотреть сообщение
А где тело перегруженных операторов?
Я не понимаю даже что писать туда
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 12:00 9
Для начала вот, тогда уже и дальше можно будет разговаривать
0
1 / 1 / 4
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 13:13  [ТС] 10
mimicria, это я уже прочитал все, знаю весь синтаксис.
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 13:41 11
Например, операция умножения на шаблонах. Компилятор знает, как перемножать int, float и т.д. Знает компилятор как умножать массивы? Нет. Шаблон класса нам позволит делать одни и те же операции (умножение) независимо от типа данных. Но для этого в типе ВАШ_КЛАСС должна быть перегружена операция умножения для массивов. Аналогично операция вывода operator<< должна быть перегружена для вашего класса.
Осталось только применить ваши знания в синтаксисе.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 13:41
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru