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

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

Войти
Регистрация
Восстановить пароль
 
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
#1

Не выходит перегрузка операторов - C++

22.12.2013, 00:05. Просмотров 272. Ответов 5
Метки нет (Все метки)

Класс матрица, перегруженные др. операции. Ошибок не выдает. Через дебаг проверил, не заносятся значения в массивы. Может я что-то с конструкторами намудрил, или еще с чем-то. Прошу помочь, лабы сдавать срочно нужно)
И еще, как сделать оператор присваивания, а то я постоянно натыкаюсь на non-static member.

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
115
116
117
118
119
120
#include <iostream>
#include <stdio.h>
#include <locale>
 
using namespace std;
 
class CMatrix
{
private:
    int Matr[8][8];
    int rows, cells;
    
public:     
    CMatrix();
    CMatrix(int n, int m);
    CMatrix Input(int i, int j);
    void SetRows(int r){rows = r;}
    void SetCells(int c){cells = c;}
    void SetElement(int i, int j);
    int GetRows(){return rows;}
    int GetCells(){return cells;}
    int GetElement(int i, int j){return Matr[i][j];}
 
    //CMatrix & operator = (const CMatrix &a);
    friend CMatrix operator + (CMatrix &A, CMatrix &B);
    friend CMatrix operator * (CMatrix &A, CMatrix &B);
    friend CMatrix transp(CMatrix &A);
    void Show(CMatrix &temp);
    
};
 
CMatrix ::CMatrix()
{
    for(int i = 0; i < 5; i++)
        for(int j = 0; j < 5; j++)
            Matr[i][j] = 0;
}
 
CMatrix :: CMatrix(int n, int m)
{
    rows = n; cells = m;
    for(int i = 0; i < rows; i++)
        for(int j = 0; j < cells; j++)
            Matr[i][j] = 0;
}
 
CMatrix CMatrix::Input(int i, int j)
{   
    CMatrix temp(this->rows = i,this->cells = j);   
    printf("\nВведите %d элементов\n", i*j);
    for(int i = 0; i < temp.rows; i++)
        for(int j = 0; j < temp.cells; j++)
            cin >> temp.Matr[i][j];
    return temp;
}
 
void Show(CMatrix &temp)
    {
        for(int i = 0; i < temp.GetRows(); i++)
        {
            cout << endl;
            for(int j = 0; j < temp.GetCells(); j++)
            {
                cout << temp.GetElement(i,j) << " ";
            }
        }
    }
 
CMatrix operator + (CMatrix &A, CMatrix &B)
    {   
        CMatrix temp(A.rows, B.cells);
        if(A.rows == B.cells && A.rows == B.rows)
        {
            for(int i = 0; i < A.rows; i++)
                for(int j = 0; j < B.cells; j++)
                    temp.Matr[i][j] = A.Matr[i][j] + B.Matr[i][j];
        }
        else
            cout << "\n Размеры матриц несовпадают!\n";
        return temp;
    }
 
CMatrix operator * (CMatrix &A, CMatrix &B)
    {
        CMatrix temp(A.rows, B.cells);
        if(A.rows == B.cells)
        {               
            for(int i = 0; i < A.rows; i++)
                for(int j = 0; j < B.cells; j++)
                    temp.Matr[i][j] = A.Matr[i][j] + B.Matr[j][i];  
        }
        else
            cout << "\n Размеры матриц несовпадают!\n";
        return temp;
    }
 
CMatrix transp(CMatrix &A)
{
    CMatrix temp(A.rows, A.cells);
    for(int i = 0; i < A.rows; i++)
            for(int j = 0; j < A.cells; j++)
                temp.Matr[i][j] = A.Matr[j][i];
    return temp;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");   
    int n, m;
    CMatrix A, B;
    CMatrix Plus, Multiply, Trans, Print;
    cout << "Введите размер первой матрицы (NxM): ";
    scanf_s("%d%*c%d", &n, &m);
    A.Input(n, m);
    cout << "Введите размер второй матрицы (NxM): ";
    scanf_s("%d%*c%d", &n, &m);
    B.Input(n, m);
    Plus = A + B;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 00:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не выходит перегрузка операторов (C++):

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

Не выходит перегрузка << и >> - C++
Добрый день формучане. Сперва хотелось бы попросить проверить правильность выполнения задания: Разработать абстрактный класс...

Перегрузка операторов - C++
Всем привет. Предположим, что нужно перегрузить оператор вывода &lt;&lt; для какого-то класса, определенного мной. Этот оператор должен выводить...

Перегрузка операторов - C++
Помогите с задачей на перегрузку операторов. (ппц мозговынос). 1)Создать class Mouse со свойством int power. #include...

Перегрузка операторов - C++
В общем учу эту тему и ввожу код один в один как в уроке, но в уроке он компилится, а у меня нет. Ругается на &quot;c1++;&quot;, подскажите...

Перегрузка операторов >>, <<, [] - C++
задача: написать перегруженные операторы &lt;&lt;, &gt;&gt; и для объекта массив деков символов. Объект дек реализован. проблема с квадратными...

5
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.12.2013, 16:37 #2
Вы сами себя запутали. У вас метод Input вызывается на матрице, т.е. по идее должен её заполнять, но вы зачем-то в нём создаёте матрицу temp и заполняете её, а затем возвращаете заполненную матрицу из метода. Но в функции main вы никуда этот результат не сохраняется, потому что ожидаете, что метод не вернёт новую матрицу, а заполнит ту, на которой был вызван.
0
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
25.12.2013, 16:47  [ТС] #3
Подправил метод Input.

C++
1
2
3
4
5
6
7
8
9
10
CMatrix CMatrix::Input(int i, int j)
{   
    this->rows = i;
    this->cells = j;    
    printf("\nВведите %d элементов\n", i*j);
    for(int i = 0; i < this->rows; i++)
        for(int j = 0; j < this->cells; j++)
            cin >> this->Matr[i][j];
    return *this;
}



Теперь возникли проблемы с Show:
Error 1 error LNK2019: unresolved external symbol "public: void __thiscall CMatrix::Show(class CMatrix &)" (?Show@CMatrix@@QAEXAAV1@@Z) referenced in function _main CMatrix.obj
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.12.2013, 16:55 #4
HUSTLIN, будьте внимательнее. Show у вас описана как глобальная функция, а не как метод. Вместо
C++
1
void Show(CMatrix &temp)
нужно
C++
1
void CMatrix::Show(CMatrix &temp)
1
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
25.12.2013, 20:57  [ТС] #5
Все, сделал
C++
1
2
3
4
5
6
7
8
9
void CMatrix::Show()
{
    for(int i = 0; i < this->GetRows(); i++)
    {
        cout << endl;
        for(int j = 0; j < this->GetCells(); j++)
            cout << this->GetElement(i,j) << " ";
    }
}
Большое спасибо!)

Добавлено через 1 час 1 минуту
Прошу помощи в реализации оператора =
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.12.2013, 21:05 #6
HUSTLIN, в принципе, он вам тут не нужен, правильно работает и оператор присваивания по умолчанию. А вообще, как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
CMatrix& operator=(const CMatrix& matrix)
{
    if (this != &matrix) {
        rows = matrix.rows;
        cells = matrix.cells;
        for(int i = 0; i < rows; i++)
            for(int j = 0; j < cells; j++)
                Matr[i][j] = matrix.Matr[i][j];
    }
 
    return *this;
}
Учтите, что поле Matr у вас имеет размерность 8, но нигде не проверяется, не превышают ли задаваемые размеры этой границы.
1
25.12.2013, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 21:05
Привет! Вот еще темы с ответами:

Перегрузка операторов с++ - C++
Доброго времени суток!Вот у меня перегрузка оператора +.Задание сделапть пергрузку так чтобы к строке можно было добавить символ и к...

Перегрузка операторов - C++
Вообщем в чём дело смысл перегрузки операторов ясен,зачем применять тоже ясно,как организуется понятно,перегрузка унарных операторов...

Перегрузка операторов - C++
Объяните пожалуйста такой вопрос: Перегрузка операторов в форме внешних функций и методов класса в языке C++. Что делает? и т.д. и т.п.

Перегрузка операторов - C++
я учусь перегружать операторы,но не получается,выдает exception class Student { public: Student(void) { name=new char; ...


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

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

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