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

Ошибка при работе с объектами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нахождения цикла в орграфе http://www.cyberforum.ru/cpp-beginners/thread966102.html
Задан орграф списком смежности, при этом его вершинами являются строчные латинские символы. Описание выглядит примерно так: <описание i-ой вершины> ::= <символ, записанный в i-й вершине> <число di...
C++ Посчитать количество различных элементов массива Собственно задача обозначена в заглавии темы. НЕ могу понять что неправильно в моем говнокоде (постоянно вывадит 100). Подскажите пожалста что нетак? for (iii = 0; iii <100; iii++) { ... http://www.cyberforum.ru/cpp-beginners/thread966089.html
C++ Список структур данных
Имеется вот такое задание: Описать, используя структуру данных запись, школьный класс (Фамилия и инициалы, дата рождения, месяц рождения, год рождения). Составить программу, выдающую список учеников,...
C++ Если a или b не число
Решил для разминки написать действие сложения, так как сам не писал его не разу, решил попробовать. всё получилось с 1 раза, но проблема в том что мне нужно если a или b не равно числу то программа...
C++ Нахождение элементов массива, встречающихся не менее определенного количества раз http://www.cyberforum.ru/cpp-beginners/thread966059.html
В файле записано огромное количество таких же огромных чисел (например, один миллиард чисел, каждое из которых находится в промежутке от нуля до миллиарда). Числа эти считываются последовательно, то...
C++ Функция Помогите в етой задаче использовать функцию #include <iostream> #include <math.h> #include <cmath> using namespace std; int main() { double y; double x; for (x=0.1 ; x<=1 ; x=x+0.09) подробнее

Показать сообщение отдельно
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2013, 02:31
Цитата Сообщение от Ryabchik Посмотреть сообщение
Л/с получили?
Я видимо тупой, потому что вас не понял)
Вы мне в л\с напишите, что не поняли.

Добавлено через 4 часа 39 минут
Цитата Сообщение от Ryabchik Посмотреть сообщение
И еще я не могу понять, почему все начинает работать нормально... Ну заменили... а что изменилось?
Почему не работало, и заработало (я не рассматриваю ваш подход к перегрузкам в данном классе, и то, как вы это делаете).
В первоначальном коде, перегрузка оператора *, сводилась к использованию перегруженного оператора *= :
C++
1
2
3
4
5
Matrix operator* (Matrix& obj1, Matrix& obj2)
{
       obj1 *= obj2;
       return obj1;
}
Оператор *= возвращает копию результата перемножения матриц. Эта копия, в операторе * , не сохраняется. Можно так
написать:
C++
1
2
3
4
5
 Matrix operator* (Matrix& obj1, Matrix& obj2)
{
       obj1.operator *= (obj2);
       return obj1;
}
В результате, из этой функции, возвращается копия неизменённого объекта obj1.

Если так изменить оператор * (чтобы сохранить то, что возвращает *=):

C++
1
2
3
4
5
Matrix operator* (Matrix& obj1, Matrix& obj2)
{
       obj1 = (obj1 *= obj2);
       return obj1;
}
или изменить оператор *= :

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
Matrix& Matrix::operator*=(Matrix& obj)
{
    // выделяем память под новую матрицу
    int** table = new int* [this -> rows];
    for (int i = 0; i < this -> rows; i ++)
        *(table + i) = new int [obj.columns];
 
    // следующий страшный алгоритм умножает строки на столбцы
    int a;
    int x = -1, y = -1;
 
    for (int k = 0; k < this -> rows; k ++)
    {
        y ++;
        x = -1;
        for (int i = 0; i < obj.rows; i ++)
        {
            a = 0;
            x++;
            for (int j = 0; j < this -> columns; j ++)
                a += this -> matrix [k] [j] * obj.matrix [j] [i];
 
            table [y] [x] = a;
        }
    }
 
    return *this = Matrix (x + 1, y + 1, table);
}
то будет работать правильно.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru