Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nar10z
1 / 1 / 1
Регистрация: 04.12.2015
Сообщений: 51
#1

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

11.04.2016, 09:40. Просмотров 752. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шаблонный класс и класс одномерный массив (C++):

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

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

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

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

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

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

10
maxm
63 / 35 / 8
Регистрация: 17.07.2014
Сообщений: 457
11.04.2016, 10:00 #2
Цитата Сообщение от nar10z Посмотреть сообщение
Само задание:
Порядок выполнения работы.
1. Создать шаблон заданного класса. Определить конструкторы, де-
структор, перегруженную операцию присваивания (“=”) и операции, за-
данные в варианте задания.
2. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для стандартных типов данных.
3. Выполнить тестирование.
4. Определить пользовательский класс, который будет использовать-
ся в качестве параметра шаблона. Определить в классе необходимые
функции и перегруженные операции.
5. Написать программу тестирования, в которой проверяется исполь-
зование шаблона для пользовательского типа.
6. Выполнить тестирование
Что конкретно у Вас не получается сделать? Тут не биржа фриланса, кидайте код, который Вам не понятен, или что то в этом роде.
Цитата Сообщение от nar10z Посмотреть сообщение
с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял
Тут и я "не понял", что вы имеете в виду.
0
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,180
11.04.2016, 10:03 #3
Слово class убери из 78-й строки для начала.
0
mimicria
return (true);
1960 / 1097 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 10:17 #4
Освобождение памяти в деструкторе, так почему выделение памяти не в конструкторе?
Цитата Сообщение от nar10z Посмотреть сообщение
Создать шаблон заданного класса
Цитата Сообщение от maxm Посмотреть сообщение
операции, заданные в варианте задания.
Что из этого заданный класс и какие операции заданы?
0
marat_miaki
148 / 137 / 50
Регистрация: 08.04.2013
Сообщений: 549
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 / 1
Регистрация: 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);
1960 / 1097 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 11:41 #7
Цитата Сообщение от nar10z Посмотреть сообщение
ну сделал я не в конструкторе.
Ну это неправильно. Выделением памяти и инициализацией значений элементов класса занимается конструктор, а не левые функции.
Цитата Сообщение от nar10z Посмотреть сообщение
Шаблон заданного класса - это неведомая х**нь, которую я не понимаю
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
Цитата Сообщение от nar10z Посмотреть сообщение
Но когда я пытаюсь применить метод вывода, у меня появляется ошибка.
Понятное дело, посмотрите что и как вы выводите. Для корректного вывода массива из класса надо перегружать оператор << для класса.
Цитата Сообщение от nar10z Посмотреть сообщение
Вот эти операции.
А где тело перегруженных операторов?
0
nar10z
1 / 1 / 1
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 11:45  [ТС] #8
Цитата Сообщение от mimicria Посмотреть сообщение
Ну так почитайте литературку, чтобы понять, а то у вас бред в голове
имеется ввиду та которая в задании.
Цитата Сообщение от mimicria Посмотреть сообщение
А где тело перегруженных операторов?
Я не понимаю даже что писать туда
0
mimicria
return (true);
1960 / 1097 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
11.04.2016, 12:00 #9
Для начала вот, тогда уже и дальше можно будет разговаривать
0
nar10z
1 / 1 / 1
Регистрация: 04.12.2015
Сообщений: 51
11.04.2016, 13:13  [ТС] #10
mimicria, это я уже прочитал все, знаю весь синтаксис.
0
mimicria
return (true);
1960 / 1097 / 91
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Создать шаблонный класс-контейнер Array, который представляет собой массив - C++
Создать шаблонный класс-контейнер Array, который представляет собой массив, позволяющий хранить объекты заданного типа. Класс должен...

Переделать класс в шаблонный класс - C++
Как данный процесс проделать? Я попробовал так по синтаксису из учебника: #include &lt;iostream&gt; #include &lt;fstream&gt; using...

Класс одномерный массив - C++
Создать класс одномерный массив целых чисел в С++. После ввода с клавиатуры произвольного одномерного массива целых чисел(объекта данного...


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

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

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