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

правильная перегрузка операторов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заголовочный файл и функции до определения http://www.cyberforum.ru/cpp-beginners/thread831085.html
Нужна небольшая помощь. Делаю лабораторную и столкнулся в небольшой проблемой. Задание : // Напишите функцию вычисления произведения двух целых чисел. Перегрузите функцию для работы с тремя и...
C++ Вывод рандомных данных в классе из текстового файла Хочу вывести рандомные данные из текстового файла по одному. Но не знаю как. Подскажите. Код: #pragma once #include <iostream> #include <fstream> #include <string.h> using namespace std; ... http://www.cyberforum.ru/cpp-beginners/thread831071.html
Сортировка указателей в массиве C++
Выполните сортировку данных по алфавиту (по фамилии) - причем сортировать потребуется только указатели в массиве. Выведите отсортированнный массив. #include <iostream> #include <stdio.h>...
C++ Микрофон
Можно ли работать с микрофоном как с файлом, точнее открыть как файл и считывать все данные? Если можно, то как? А если нельзя, то какая лучшая библиотека для получения спектра с микрофона?
C++ Проверка массива char на равенство с таким же массивом http://www.cyberforum.ru/cpp-beginners/thread831028.html
#include <iostream> using namespace std; int main() { char chArr={"4 8"}; char chCode={"4 8"}; if (chCode==chArr) cout<<"Succes!"; else coutl<<"\a";
C++ Произведение чисел в массиве между двумя первыми отрицательными элементами Одномерный массив, задается рандомно, надо найти произведение чисел между первым и вторым отрицательным числом. Вот то, что у меня получилось... #include<iostream> #include<time.h>... подробнее

Показать сообщение отдельно
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927

правильная перегрузка операторов - C++

08.04.2013, 00:17. Просмотров 787. Ответов 5
Метки (Все метки)

Доброго времени суток. Я пишу класс матриц для себя. Возникла проблема при перегрузке операторов. Что должен возвращать оператор + и как это совместить с оператором = ?
В моем коде запись c=a+b;(где c,a,b-переменные типа матрицы) работать не будет, потому что оператор + возвращает значение,а оператор = принимает ссылку.
Как избежать этой проблемы?
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class matrix
{
public:
    matrix(int,int);
    ~matrix(void);
    int columns;//кол столбиков
    int rows;//кол строк
    double **mat;//сама матрица
    //double det(void);
    //matrix inverse(void);//нахождение обратной
    matrix transpon(void);
    void transpon_this(void);
    matrix operator=(const matrix &);//оператор присваивания
    matrix operator+(const matrix &);//оператор сложения
    matrix operator-(const matrix &);//оператор вычитания
    matrix operator*(const matrix &);//оператор умножения матриц
    bool operator==(const matrix &);//оператор сравнения
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
matrix matrix::operator=(const matrix &input)
{
    for (int i=0; i<rows;++i)
        delete [] mat[i];
    delete [] mat;
 
    rows=input.rows;
    columns=input.columns;
    mat=new double*[rows]; 
    for (int i=0;i<rows;++i)
        mat[i]=new double[columns];
 
    for (int i=0;i<rows;++i)
        for(int j=0;j<columns;++j)
            mat[i][j]=input.mat[i][j];
    return *this;
}
C++
1
2
3
4
5
6
7
8
9
10
11
matrix matrix::operator+(const matrix & rightmatrix)
{
    if ((rows==rightmatrix.rows)&&(columns==rightmatrix.columns))
    {
        matrix temp(rows,columns);
        for (int i=0;i<rows;++i)
            for (int j=0;j<columns;++j)
                temp.mat[i][j]=mat[i][j]+rightmatrix.mat[i][j];
        return temp;
    } else return(matrix(0,0));
}
Спасибо, всем ответившим!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.