Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351

Шаблон родительского класса и шаблон класса потомка

22.12.2017, 12:16. Показов 1813. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Запутался, как правильно пронаследоваться от шаблона класса?
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <cmath>
 
using namespace std;
 
#define min -10
#define max 10
 
 
template <typename T>
class Matrix
{
private:
    T **MatrixData; 
    int NumberOfColumns;
    int NumberOfLines;
public:
    Matrix(int line = 5, int column = 5);// по умолчанию строк - 5, столбцов -5
    ~Matrix(); // деструктор
    void printMatrixData();
};
 
// конструктор
template <typename T>
Matrix<T>::Matrix(int lines, int columns)
{
    NumberOfLines = lines;
    NumberOfColumns = columns;
    // Выделяем место под матрицу - begin
    MatrixData = new T*[NumberOfLines];
    for(int i = 0; i < NumberOfLines; i++)
        MatrixData[i] = new T[NumberOfColumns];
    // Выделяем место под матрицу - end
 
    // Заполняем матрицу и выводим на экран - begin
    cout << "Сформированная матрица:" << endl;
    for(int i = 0; i < NumberOfLines; i++)
        for(int j = 0; j < NumberOfColumns; j++)
        {
            int k = rand();
            k = k % (max-min)+min;
            MatrixData[i][j] = (T)k/(T)8.0;
        }
    // Заполняем матрицу и выводим на экран - end
}
 
// деструктор
template <typename T>
Matrix<T>::~Matrix()
{
    
}
 
// вывод матрицы на экран
template <typename T>
void Matrix<T>::printMatrixData()
{
    // Выводим на экран - begin
    for(int i = 0; i < NumberOfLines; i++)
    {
        for(int j = 0; j < NumberOfColumns; j++)
            cout << MatrixData[i][j] << "\t";
        cout << endl;
    }
    // Выводим на экран - end
}
 
template <typename T>
class Solution : public Matrix<T>
{
private:
    T **MatrixDataSol;
    int NumberOfColumns;
    int NumberOfLines;
public:
    Solution(int line = 5, int column = 5);// по умолчанию строк - 5, столбцов -5
    ~Solution(); // деструктор
};
 
// конструктор
template <typename T>
Solution<T>::Solution(int lines, int columns)
{   
    NumberOfLines = lines;
    NumberOfColumns = columns;
}
 
// деструктор
template <typename T>
Solution<T>::~Solution()
{
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    Solution<int> sol(10, 10);
    sol.printMatrixData();
 
    system("pause");
    return 0;
}
Вот что сделал, но в результате получается не матрица 10х10, а как по умолчанию 5х5. В чем проблема?

Добавлено через 26 минут
Да, программа должна работать так:
Родительский класс инициализирует матрицу(тип либо float, либо int), а потомок находит минимум в матрице.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2017, 12:16
Ответы с готовыми решениями:

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Шаблон класса, параметром которого должны являться наследники определённого класса
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром которого должны являтся наследники...

Написать шаблон класса на основе класса vector для реализации стековой структуры данных
Пыталась написать код, но не уверена будет ли такая реализация корректной, можно ли это сделать как-то по - другому? И как надо...

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.12.2017, 13:47
Зачем ты второй раз перечислил поля, которые наследуются?
0
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 14:26  [ТС]
В классе потомке нужно будет работать потом с такой же матрице.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
22.12.2017, 15:16
Используй для этого
protected:
0
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 16:18  [ТС]
New_man, не совсем понял что вы имели ввиду, что именно к
C++
1
protected:
надо отнести?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.12.2017, 16:27
что именно к protected: надо отнести?
C++
1
2
3
   T **MatrixData; 
    int NumberOfColumns;
    int NumberOfLines;
в Matrix

Добавлено через 36 секунд
А в Solution это вовсе убрать.
0
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 22:00  [ТС]
Поставил, но толку мало, сначала вызывается конструктор для Matrix с параметрами по умолчанию, а затем только присваиваются переменные классу Matrix и при вызове функции вывода в консоль получаем вылет из-за выхода за пределы массива.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Matrix.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
#define min -10
#define max 10
 
 
template <typename T>
class Matrix
{
protected:
    T **MatrixData;
    int NumberOfColumns;
    int NumberOfLines;
public:
    Matrix(int line = 5, int column = 5);// по умолчанию строк - 5, столбцов -5
    ~Matrix(); // деструктор
    Matrix(const Matrix& obj);
    void printMatrixData();
};
 
// конструктор
template <typename T>
Matrix<T>::Matrix(int lines, int columns)
{
    cout << "Matrix(i, j)" << endl;
    NumberOfLines = lines;
    NumberOfColumns = columns;
    // Выделяем место под матрицу - begin
    MatrixData = new T*[NumberOfLines];
    for (int i = 0; i < NumberOfLines; i++)
    {
        MatrixData[i] = new T[NumberOfColumns];
        cout << "I = " << i << endl;
    }
    // Выделяем место под матрицу - end
 
    // Заполняем матрицу и выводим на экран - begin
    cout << "Сформированная матрица:" << endl;
    for (int i = 0; i < NumberOfLines; i++)
    for (int j = 0; j < NumberOfColumns; j++)
    {
        int k = rand();
        k = k % (max - min) + min;
        MatrixData[i][j] = (T)k / (T)8.0;
    }
    // Заполняем матрицу и выводим на экран - end
}
 
// деструктор
template <typename T>
Matrix<T>::~Matrix()
{
    cout << "~Matrix()" << endl;
    printMatrixData();
    delete [] MatrixData;
}
 
// вывод матрицы на экран
template <typename T>
void Matrix<T>::printMatrixData()
{
    // Выводим на экран - begin
    for (int i = 0; i < NumberOfLines; i++)
    {
        for (int j = 0; j < NumberOfColumns; j++)
            cout << MatrixData[i][j] << "\t";
        cout << endl;
    }
    // Выводим на экран - end
}
 
template <typename T>
class Solution : public Matrix<T>
{
private:
    T **MatrixDataSol;
public:
    Solution(int line = 5, int column = 5);// по умолчанию строк - 5, столбцов -5
    ~Solution(); // деструктор
};
 
// конструктор
template <typename T>
Solution<T>::Solution(int lines, int columns)
{
    cout << "Solution(i j)" << endl;
    this->NumberOfLines = lines;
    this->NumberOfColumns = columns;
    this->printMatrixData();
}
 
// деструктор
template <typename T>
Solution<T>::~Solution()
{
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Solution<int> sol(10, 10);
    sol.printMatrixData();
 
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Как сделать чтобы в конструктор передались параметры, кт. указаны в конструкторе для Solution?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.12.2017, 22:29
C++
1
2
3
4
5
6
// конструктор
template <typename T>
Solution<T>::Solution(int lines, int columns) : Matrix<T>(lines, columns)
{
    cout << "Solution(i j)" << endl;
}
1
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 23:00  [ТС]
До меня уже дошло)
TRam, спасибо, хоть и поздновато))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2017, 23:00
Помогаю со студенческими работами здесь

Шаблон класса (параметризация класса)
Нужна помощь и советы!!! Англо-русский словарь построен как список. Каждая компонента содержит английское слово, соответствующее...

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. Честно говоря, я ничего не понимаю. И вот...решил...

Шаблон класса
//файл T_Point_template.h //--------------------------------------------------------------------------- #ifndef T_Point_templateH ...

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru