Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2014, 23:20   #1
Ostor
 
Регистрация: 02.11.2014
Сообщений: 5
По умолчанию Перегрузка операторов (работа с матрицей в шаблонном классе) Начинающий уровень

Добрый вечер. Задача сейчас стоит такая задача: создать методы сложения, вычитания, поэлементного умножения т.д.(главное хоть с 1 разобраться), имеющие 1 аргумент экземпляр класса matrix, над которым должно производиться действие. При этом результат математического действия записывается в экземпляр класса, метод которого вызывается.

Сами методы вроде бы прописал, но не могу понять как правильно передавать параметры и как в самом main организовать эти действия, при попытке компиляции сразу же ошибки. Подсказали мне что причина скорее всего в том что неправильно передаются параметры и надо как то это организовывать через конструктор копий, как пока не понял.
По ошибкам: если снимаю комментарий с самого метода + например то
error C2955: matrix: для использования класса шаблон требуется список аргументов шаблон см. объявление "matrix"
error C2039: +: не является членом "matrix<T>"


Код:
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <time.h> 
using namespace std;
 
template <class T> class matrix
{
    private:
    T** data; // массив элементов матрицы
        int rows; // количество строк
        int cols; // количество столбцов
    
       public:
        matrix();
        matrix( int rows , int cols );
        void out();
       ~matrix( );
       void dobav(int k);
       int &operator() (int i, int j)  {return data[i][j];}
       matrix operator +  (matrix c);  //как правильно передать параметр? 
       matrix operator - (matrix c);   //??
           matrix operator * (int a);      //??
};
 
// Методы класса     
 
 
 
 
 
template < class T >  // Констр. по умолчанию
matrix< T >::matrix()
{
    
    rows=0
    cols=0;
}
 
 
template < class T >
matrix< T >::matrix( int rows, int cols )  // Констр. с 2 пар-ми
{
    time_t t;//RANDOM
 
             srand((unsigned) time(&t));// RANDOM
 
    this ->rows = rows;  
    this ->cols = cols; 
    data = new T* [rows];
    for (int i=0; i<rows; i++)
    {
        data[i]=new T[cols];
    }///создание пустого массива
    for (int k=0; k<rows; k++)
    {
        for (int i=0; i<cols;i++)
        {
            data[k][i] = rand()%25;
        }
    }///заполнение
 
}
 
template <class T>
void matrix<T>::out(){
        for (int k=0; k<rows; k++)
        {
            for (int i=0; i<cols; i++)
            {
                cout << setw (4) << data[k][i]; //<< setw (4);
            }
            cout << endl;
 
        }
}
 
 
template <class T>
matrix<T>::~matrix() 
{
    for (int i=0; i<rows; i++) delete[] data[i];
    delete []data;
}
 
 
 
 
template <class T>
matrix matrix<T>::operator +(matrix c){
    this ->rows = rows;  
    this ->cols = cols;
        matrix d(rows,cols);
        for (int k=0; k<rows; k++){
        for (int i=0; i<cols;i++){
        d.data[k][i] = c.data[k][i]+data[k][i] ;
        }
    }
return d;
}
 
 
template <class T>
matrix matrix<T> ::operator -(matrix c){
this ->rows = rows;  
    this ->cols = cols;
    matrix d(rows,cols);
        for (int k=0; k< rows; k++){
            for (int i=0; i<cols;i++){
            d.data[k][i] = data[k][i]- c.data[k][i];
        }
    }
return d;
}
 
 
template <class T>
matrix matrix<T>::operator *(int a)
{
    this ->rows = rows;  
    this ->cols = cols; 
matrix c(rows,cols);
 
for ( int i=0;i<rows;i++)
    for (int j=0;j<cols;j++)
d.[i][j]=a*data[i][j];
return d;
}
 
 
 
 
int main()
{
 
    int n,m;
    setlocale(LC_ALL,"Russian");
    
    matrix< int >b(6,6);
    b.out();
    cout << endl << "Нахождение элемента на пересечении: " << endl;
    cout << "Введите номер строки: ";
    cin >> n;
    cout << "Введите номер cтолбца: ";
    cin >> m;
    int element = b(n-1,m-1);
    cout << endl <<  "Элемент на их пересичении: " << element << endl;
 
    // matrix<int>c(6,6);
    // c.out();
 
 
    
    system("pause");
    return 0;
}
Ostor вне форума Ответить с цитированием
Старый 11.11.2014, 09:49   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include<stdio.h>

template <class T>
class matrix
{
public:
    matrix(size_t sz) : m_size(sz)
    {
        m_arr = new T*[m_size];
        for(size_t i = 0; i < m_size; i++)
            m_arr[i] = new T[m_size];
    }
    ~matrix()
    {
        for(size_t i = 0; i < m_size; i++)
            delete [] m_arr[i];
        delete [] m_arr;
    }

    matrix& operator+(const matrix& rm)
    {
       //TODO:
       printf("operator+");
       return *this;
    }
private:
    size_t m_size;
    T**    m_arr;
};




int main(void)
{
    matrix<int> m1(2), m2(2);
    m1 = m1 + m2;
    return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 11.11.2014, 19:06   #3
Ostor
 
Регистрация: 02.11.2014
Сообщений: 5
По умолчанию

Спасибо, нашел свою ошибку
Ostor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицей в шаблонном классе(Начинающий) Ostor Общие вопросы C/C++ 2 03.11.2014 20:10
Ошибки в шаблонном классе _SOKOL_ Общие вопросы C/C++ 8 06.02.2013 08:08
перегрузка операторов дружеской ф-ции в шаблонном классе Rayzor Общие вопросы C/C++ 1 24.05.2012 14:29
перегрузка оператора вывода в шаблонном классе Anubys Общие вопросы C/C++ 3 14.03.2012 15:15
Перегрузка оператора в шаблонном классе alex_alpha Общие вопросы C/C++ 0 12.08.2010 21:37