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

непонятное явление при перегрузке умножения в классе матриц - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Три задачки по двумерным массивам http://www.cyberforum.ru/cpp-beginners/thread411491.html
Дана матрица В(4;4): 1) Найти произведение положительных элементов среди элементов расположенных выше побочной диагонали матрицы В. (!) Я в ужасе... 2) Найти минимальный элемент во 2-м столбце матрицы В 3) Поменять местами найденный минимальный элемент и элемент находящийся в 4 строке, 3 столбце. Прошу прощения за наглость - но надо-бы код целиком :) 2 и 3 я думаю сделаю, а вот от 1 просто...
C++ проблема - при выводе переменных, их значения изменяются Проблема в элементарном коде, после присваивания переменной `result1` значения `n+++m--`, значения `n` и `m`, тоже изменяются, что за ерунда?? Допустим вводим `n=2` и `m=3`, после присваивания `result1=n+++m--`, `n=3`, а `m=2`. Это лабораторная по C++, в основном пишу на С#, таких проблем не было. float m, n, x, result, result1, result2; cout << "Введите n: "; cin >> n; // ввод m ... http://www.cyberforum.ru/cpp-beginners/thread411485.html
Вывод всех n-значных чисел C++
Вывод всех Х значных (х<=10) десятичных чисел, сумма цифр крирпых равна данному целому цислу P<90. Число X и P вводится с клавиатуры.
Программа банк C++
Сумма S рублей положена в сбербанк, при этом ежегодный прирост составляет P% и считается непрерывным. Определить, через сколько лет первоначальная сумма увеличится в N раз. Числа S<=1kk; P<=100; N<=10. Ввод с клавиатуры.
C++ Найти, каких символов больше точек или запятых на С++ http://www.cyberforum.ru/cpp-beginners/thread411439.html
Дана последовательность из н символов найти каких символов больше точек или запятых Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят. Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
C++ mingw ./configure --prefix Добрый день. Собираю gstreamer под винду. Где посмотреть толковое объяснение значения опции prefix? Или может, кому-то не лень на месте объяснить. Вопрос в таком плане: что это ещё такое, кроме того, что это в итоге путь к корню для установки для make install? Можно ли его изменять при make install, или только при .configure? И можно ли сделать так, чтобы ./configure искал... подробнее

Показать сообщение отдельно
Yakoot
15 / 15 / 2
Регистрация: 13.11.2011
Сообщений: 65
19.12.2011, 15:18     непонятное явление при перегрузке умножения в классе матриц
ну собсна есть класс
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
class matrix
{
private:
    int n, m;
    double *p;
public:
    matrix();   
    matrix(int, double [] = NULL);
    matrix(int, int, double [] = NULL);
    matrix(const matrix &);
    ~matrix();
    bool check_plus(const matrix &) const;
    bool check_mult(const matrix &) const;
    double max() const;
    double min() const;
    friend std::ostream &operator <<(std::ostream &, const matrix&);
    const double *operator [](int) const;
    double *operator [](int);
    matrix &operator =(const matrix &);
    matrix &operator +=(const matrix &);
    matrix &operator -=(const matrix &);
    matrix &operator *=(const matrix &);
    matrix &operator *=(double);
};
 
matrix operator +(const matrix &, const matrix &);
matrix operator -(const matrix &, const matrix &);
matrix operator *(const matrix &, const matrix &);
matrix operator *(const matrix &, double);
двухмерный массив хранится в виде одномерного.. все прекрасно работает.. но препод подошел, и написал для проверки умножения
C++
1
matrix z2 = 2*z;
при этом вываливается исключение, прописанное в операции *=
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
matrix &matrix::operator *=(const matrix &a)
{
    if (this->check_mult(a))
    {
        double *tmp;
        tmp = new double[n*a.m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < a.m; j++)
            {
                tmp[a.m*i+j] = 0;
                for (int k = 0; k < m; k++)
                    tmp[a.m*i+j] += p[i*n+k]*a.p[k*a.m+j];
            }
        for (int i = 0; i < n*a.m; i++)
            p[i] = tmp[i];
        m = a.m;
        return *this;
    }
    else
        throw "Error: wrong sizes";
}
умножение на скаляр у меня перегружается так

C++
1
2
3
4
5
6
matrix operator *(const matrix &a, double k)
{
    matrix tmp(a);
    tmp *= k;
    return tmp;
}
не могу понять в чем дело.. перегрузил умножение скаляра на вектор, но он сказал пока закомментить и решить проблему не создавая

Добавлено через 16 минут
.....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru