0 / 0 / 0
Регистрация: 30.10.2017
Сообщений: 16
1

Перегрузка операторов

22.03.2018, 21:02. Показов 417. Ответов 2
Метки нет (Все метки)

Не удается перегрузить операторы [][], <<, >>.Ошибка declaration of 'operator[]/operator>>/operator<<' as non-function.
Подскажите, пожалуйста, как можно исправить.
matrix2.h
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
#ifndef MATRIX_H_INCLUDED
#define MATRIX_H_INCLUDED
#include <iostream>
 
class Matrix {
private:
    double a[2][2];
public:
    Matrix();
    friend void swap(Matrix& a, Matrix& b);
    Matrix(const Matrix& a);
    explicit Matrix(double v1 ,double v2);
    Matrix& operator = (Matrix a);
    Matrix& operator += (Matrix& a);
    Matrix& operator -= (const Matrix& a);
    Matrix& operator != (const Matrix& a);
    Matrix& operator +() const;
    Matrix& operator -() const;
    Matrix& operator * (double q);
    int& operator [][] (int i, int j);
    //const int& operator [][] (int i, int j) const;
    double getDet (const Matrix& a) const;
    double makeMatrix (double t1, double t2, double t3, double t4);
    void transp (const Matrix& a);
    friend std::ostream& operator << (ostream& os, const Matrix& a);
    friend std::istream& operator >> (istream& is, Matrix& a);
    friend void swap(Matrix& a, Matrix& b);
};
 
 
#endif // MATRIX_H_INCLUDED
matrix2.cpp
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
#include <iostream>
#include "matrix2.h"
#include <cmath>
#include <utility>
using namespace std;
 
Matrix::Matrix (double v1, double v2) {
    v1 = 1, v2 = 0;
    for (int i = 1; i < 3; ++i){
        for (int j = 1; j < 3; ++j)
        if (i = j) a[i-1][j-1] = v1;
        else a[i-1][j-1] = v2;
    }
}
void swap (Matrix& a,Matrix& b) {
    swap(a,b);
}
Matrix::Matrix (const Matrix& b) {
    for (int i = 1; i < 3; ++i)
        for (int j = 1; j < 3; ++j)
      a[i-1][j-1] = b[i-1][j-1];
}
Matrix& Matrix::operator = (Matrix a){
     swap(*this, a);
     return *this;
}
Matrix& Matrix::operator += (Matrix& b) {
    this -> a[0][0] += b[0][0];
    this -> a[0][1] += b[0][1];
    this -> a[1][0] += b[1][0];
    this -> a[1][1] += b[1][1];
    return *this;
}
Matrix& Matrix::operator -= (const Matrix& b) {
    this -> a[0][0] -= b[0][0];
    this -> a[0][1] -= b[0][1];
    this -> a[1][0] -= b[1][0];
    this -> a[1][1] -= b[1][1];
    return *this;
}
bool Matrix& Matrix::operator != (const Matrix& a, const Matrix& b){
    for (int i = 1; i < 3; ++i)
        for (int j = 1; j < 3; ++j)
            if (a[i-1][j-1] != b[i-1][j-1])
            return 1;
}
Matrix& Matrix::operator +() const {
    return Matrix(+ this);
}
Matrix& Matrix::operator -() const {
    return Matrix(- this);
}
friend ostream& operator << (ostream &os, const Matrix& a){
    for (int i = 1; i < 3; ++i)
        for (int j = 1; j < 3; ++j)
    return os <<"Matrix("<< a[i-1][j-1] <<")";
}
friend istream& operator >> (istream &is, Matrix& a) {
    for (int i = 1; i < 3; ++i)
        for (int j = 1; j < 3; ++j)
        return is >> a[i-1][j-1];
}
Matrix& Matrix::operator * (double q) {
    for (int i = 1; i < 3; ++i) {
        for (int j = 1; j < 3; ++j)
            this -> a[i-1][j-1] = a[i-1][j-1]*q;
    }
}
int & Matrix::operator [][] (int i, int j]) {
    return a[i][j];
}
/*const int & Matrix::operator [][] (int i, int j) const {
    return a[i][j];
}*/
double Matrix::getDet (const Matrix& a) const {
    double det = a[0][0]*a[1][1] - a[0][1]*a[1][0];
    return det;
}
double Matrix::makeMatrix (double t1,double t2,double t3,double t4) {
    this -> a[0][0] = t1;
    this -> a[0][1] = t2;
    this -> a[1][0] = t3;
    this -> a[1][1] = t4;
}
void Matrix::transp (const Matrix& a) {
    for (int i = 1; i < 3; ++i)
        for ( int j = 1; j < 3; ++j)
    this = a[i-1][j-1];
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2018, 21:02
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов
Задание такое-Составить описание класса для представления комплексных чисел. Обеспечить выполнение...

Перегрузка операторов
Доброй ночи! Изучаю перегрузку операторов. Создал класс Дробь, где в качестве данных выступают...

Перегрузка операторов
Вот задание b) Создать класс Set – множество целых чисел, используя динамическую память....

2
13 / 15 / 5
Регистрация: 16.10.2016
Сообщений: 206
22.03.2018, 21:10 2
В определении функции не нужно указывать friend, а также нет такого оператора [][], это сумма двух операторов [] .
0
0 / 0 / 0
Регистрация: 30.10.2017
Сообщений: 16
22.03.2018, 21:28  [ТС] 3
Оператор [] стоит 2 раза отдельно перегрузить или перегрузить один оператор внутри другого?
Без friend компилятор выдает сообщение о той же ошибке.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2018, 21:28

Перегрузка операторов
Никак не возьму в толк, почему оно не работает! // CG5.cpp : Defines the entry point for the...

C++ перегрузка операторов
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить...

Перегрузка операторов
Ошибка: &quot;error: invalid operands to binary expression ('Number *' and 'Number *') n3 = n1 * n2;&quot;...

Перегрузка операторов
Приветствую! Необходима помощь. Разработать класс Vec4 как вектор из 4-х float. Определить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru