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

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

Войти
Регистрация
Восстановить пароль
 
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
#1

Шаблонный класс - C++

07.11.2013, 13:39. Просмотров 723. Ответов 11
Метки нет (Все метки)

День добрый. Пишу матричный калькулятор на шаблонном классе. Хочу добиться того, чтобы можно было оперировать с матрицами всех численных типов. Для 1 типа класс отлажен и работает хорошо, но, когда переделал под все типы, всё пошло наперекосяк. И первый вопрос в том как произвести действие над объектами разных классов и можно-ли вообще? К примеру обращение матрицы. Ввожу целочисленную, но функция должна возвращать вещественную.
Когда вызываю функцию обращения матрицы для уже созданного объекта типа double, куда будет записан результат, и в качестве параметра передаю объект класса типа int, то происходит несоответствие типов. Подскажите как с этим справиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонный класс (C++):

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

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

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

шаблонный класс - C++
реализован согласно "Создание конструкторов и деструктора" на шаблон класса с параметром -Тип данных в файле, редактируется (байт / слово /...

Шаблонный класс - C++
Подскажите как указать реализацию методов для шаблонного класса template <class T_machine> class hospital_room { ...

Шаблонный класс - C++
Я запутался с шаблонами. Не пойму никак как вызвать конструктор с введенным в функции check_int() значением и как дальше вызвать функции...

11
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2013, 13:50 #2
Цитата Сообщение от Arkaniy Посмотреть сообщение
И первый вопрос в том как произвести действие над объектами разных классов и можно-ли вообще?
если конкретно про матрицы, то почему нет. Думаю, что вполне можно. Как минимум можно в шаблонный класс добавить шаблонный конструктор, который будет думать, что входной параметр является матрицей другого типа и будет пытаться поэлементно ее скопировать в свой тип.
Аналогично можно реализовать и другие действия.
Для подробности в ответе нужно больше конкретики в вопросе. Например, куски кода
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
07.11.2013, 14:04  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
matrix(int s_m,int s_n,int set):m(s_m),n(s_n)
    {
        mass=new type*[m];
        for(int i=0;i<m;i++)
            mass[i]=new type[n];
        if(set)set_mass();
        else
            for(int i=0;i<m;i++)
                for(int j=0;j<n;j++)
                    mass[i][j]=0;
    }
Собственно, конструктор. Первые 2 параметра это кол-во строк и столбцов, а третий определяет как вводится матрица: 1-пользователем, 0-забивается нулями.

C++
1
2
rev=new matrix<double>(m,n,0);
*rev=rev->revers(*a1);
Тут в rev должна возвратиться матрица обратная а1. а1 типа интеджер. Здесь-то и происходит несоответствие.
Тут конечно можно попробывать пойти по-другому и вызывать функцию обращения из а1 без параметра, а записывать уже в rev. Но как быть, если складываю разные типы? Просто перед созданием объекта определять тип результирующей матрицы через условие? Хочется сделать без этого.
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2013, 14:12 #4
C++
1
*rev=rev->revers(*a1);
явно что-то не так в королевстве датском
если реверс является методом класса матрица, то использоваться он должен так
C++
1
matrix_name.revers();
все. никаких параметров. никаких возвращаемых значений

иначе делать метод реверса статическим или вообще отдельной функцией, тогда
C++
1
matrix::reverse(matrix_name);
Если сделать правильные методы, то тогда вопрос сведется к такому
C++
1
2
3
4
matrix<int> int_matrix(m, n, 0);
matrix<double> double_matrix(m, n, 0);
//... какие-то действия
double_matrix = int_matrix; // и вот тут будет ошибка
Чтобы убрать эту ошибку, нужно определить оператор присваивания и, заодно, конструктор копии, которые будут принимать на вход матрицу какого-то типа T
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
07.11.2013, 16:56  [ТС] #5
С этим пока понял.
Вот еще вопрос. Каким образом можно определить тип вводимого значения? То есть чтобы компьютер сам определял объект какого типа ему создавать.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
07.11.2013, 17:22 #6
Arkaniy, Простите, что? Вместо компьютер надо понимать компилятор? Никак, где-то в программе на этапе компиляции должен быть известен тип данных.
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.11.2013, 17:54 #7
Не понял вопроса. Типы в шаблонах выводятся компилятором на этапе компиляции самостоятельно или с помощью программиста.
Давайте код и по нему вопрос, связанный с типами
0
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
08.11.2013, 13:15  [ТС] #8
ForEveR, Вы правы, имел ввиду именно компилятор.
Сейчас отходя от темы матриц такой вопрос. Допустим, есть возможность создать объект шаблонного класса тремя разными типами(int,double,char). Вопрос в том как сообщить компилятору объект какого типа ему создавать если этот тип явно не определяется? То есть если пользователь начал вводить буквы, то создается char, если целые числа-int, дробные-double.
Я думал использовать стринг и после введенной строки проверять каждый символ. Такой подход вменяемый или возможно по-другому?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.11.2013, 13:24 #9
Arkaniy, Только так и можно. Определять придется неким свитчем по типам.
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
08.11.2013, 13:35  [ТС] #10
ForEveR, спасибо, с этим понял.
Уже пытался так сделать, но застрял на том, чтобы написать вот так
C++
1
2
3
4
5
6
7
typename type;
......
switch(key)
{
    case'i':type=int; break;
    case'd':type=double; break;
}
где в key записан условный символ типа, который нужно будет использовать. Вариант с typename type; не прокатит, я уже понял.
Так собственно каким образом это реализовать?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.11.2013, 13:48 #11
Arkaniy, Так не получится очевидно. Написать перегрузки например. Или просто сразу создать тот шаблон который нужно и работать с ним.
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
#include <iostream>
 
template<typename T>
class variable
{
public:
   void execute() { (void)(T() % 10); }
};
 
template<>
void variable<double>::execute() { }
 
int main()
{
   char value = 0;
   std::cin >> value;
   switch (value)
   {
   case 'i':
      variable<int> ivar;
      ivar.execute();
      break;
   case 'd':
      variable<double> dvar;
      dvar.execute();
      break;
   }
}
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
08.11.2013, 13:52  [ТС] #12
ForEveR, снова спасибо
Очень помогли, буду пробывать.
0
08.11.2013, 13:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2013, 13:52
Привет! Вот еще темы с ответами:

Шаблонный класс - C++
Ребят, прошу Вашей помощи.. Программу я написала.. Она работает. Но теперь мне нужно переделать ее , используя шаблонный класс. Я...

Шаблонный класс - C++
Создание шаблона класса с 1 параметром типа ( шаблонный класс ) По типу : Template&lt;Typename T&gt; Class... #include &lt;iostream&gt; ...

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

Шаблонный класс - C++
Как его реализовать??? Смысл я понимаю, но вот как записать...не знаю:cry:


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

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

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