Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
74 / 58 / 31
Регистрация: 20.03.2017
Сообщений: 351
1

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

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

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

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

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

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

8
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
22.12.2017, 13:47 2
Зачем ты второй раз перечислил поля, которые наследуются?
0
74 / 58 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 14:26  [ТС] 3
В классе потомке нужно будет работать потом с такой же матрице.
0
301 / 213 / 74
Регистрация: 23.05.2011
Сообщений: 970
22.12.2017, 15:16 4
Используй для этого
protected:
0
74 / 58 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 16:18  [ТС] 5
New_man, не совсем понял что вы имели ввиду, что именно к
C++
1
protected:
надо отнести?
0
зомбяк
1420 / 1084 / 310
Регистрация: 14.05.2017
Сообщений: 3,552
22.12.2017, 16:27 6
что именно к protected: надо отнести?
C++
1
2
3
   T **MatrixData; 
    int NumberOfColumns;
    int NumberOfLines;
в Matrix

Добавлено через 36 секунд
А в Solution это вовсе убрать.
0
74 / 58 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 22:00  [ТС] 7
Поставил, но толку мало, сначала вызывается конструктор для 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
зомбяк
1420 / 1084 / 310
Регистрация: 14.05.2017
Сообщений: 3,552
22.12.2017, 22:29 8
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
74 / 58 / 31
Регистрация: 20.03.2017
Сообщений: 351
22.12.2017, 23:00  [ТС] 9
До меня уже дошло)
TRam, спасибо, хоть и поздновато))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2017, 23:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Шаблон класса
//файл T_Point_template.h...

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

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


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

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

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