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

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

Войти
Регистрация
Восстановить пароль
 
Mikelanjelo
1 / 1 / 0
Регистрация: 17.09.2012
Сообщений: 24
#1

Странности поведения матриц - C++

13.04.2014, 13:10. Просмотров 190. Ответов 1
Метки нет (Все метки)

При реализации класса матриц магия C++ проявила себя уже на сложении. При сложении каким-то образом портится правый операнд (внутренняя перегрузка унарного плюса). Вылетает даже на простой модели с ошибкой обращения к памяти.

Заголовочный класса:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef MATRIX_H
#define MATRIX_H
#include <string>
#include <sstream>
 
using namespace std;
 
class matrix
{
private:
    int *pmatrix;
    unsigned int cCol,cRow;
public:
    //Конструкторы
    matrix(unsigned int rowCount, unsigned int colCount);
    matrix(int* arr, unsigned int rowCount, unsigned int colCount);
 
    //Перевод матрицы в строку
    string toString();
 
    //Операции
    matrix operator+(matrix);
    matrix operator=(matrix);
 
    //Деструктор
    ~matrix();
};
 
#endif // MATRIX_H


Реализация класса:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "matrix.h"
 
//Перевод числа в строку
string myIntToString(int val)
{
    ostringstream oss;
    oss << val;
    return oss.str();
}
 
//Конструкторы
matrix::matrix(unsigned int rowCount, unsigned int colCount)
{
    unsigned int i,j;
    cCol = colCount;
    cRow = rowCount;
    pmatrix = new int [cCol*cRow];
    for (i = 0; i < cRow; i++)
    {
        for (j = 0; j < cCol; j++)
        {
            pmatrix[i*cCol+j] = 0;
        }
    }
}
 
matrix::matrix(int *pm, unsigned int rowCount, unsigned int colCount)
{
    unsigned int i,j;
    cCol = colCount;
    cRow = rowCount;
    pmatrix = new int [cCol*cRow];
    for (i = 0; i < cRow; i++)
    {
        for (j = 0; j < cCol; j++)
        {
            pmatrix[i*cCol+j] = pm[i*cCol+j];
        }
    }
}
 
//Перевод матрицы в строку
string matrix::toString()
{
    unsigned int i,j;
    string tmp = "";
    for (i = 0; i < cRow; i++)
    {
        for (j = 0; j < cCol; j++)
        {
            tmp += myIntToString(pmatrix[i*cCol+j]) + ' ';
        }
        tmp += '\n';
    }
    return tmp;
}
 
//Операции
matrix matrix::operator+(matrix op)
{
    unsigned int i;
    matrix tmp(cRow,cCol);
    for (i = 0; i < cRow*cCol; i++)
    {
        tmp.pmatrix[i] = pmatrix[i] + op.pmatrix[i];
    }
    return tmp;
}
 
matrix matrix::operator=(matrix op)
{
    for (unsigned int i = 0; i < cRow*cCol; i++)
        pmatrix[i] = op.pmatrix[i];
    return (*this);
}
 
//(Капитан очевидность) Деструктор
matrix::~matrix()
{
    delete [] pmatrix;
}


Головная:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "matrix.h"
 
using namespace std;
 
int main()
{
    int pa[9];
    for (int i = 0; i < 9; i++)
    {
        pa[i] = i;
    }
    matrix a(pa, 3, 3), b(pa, 3, 3), c(3, 3);
    c = a + b;
    cout << a.toString() << endl;
    cout << b.toString() << endl;
    cout << c.toString() << endl;
    return 0;
}


Без решения проблемы дальше нет смысла двигаться. Заранее спасибо за ответ и терпение (ибо разбор чужого кода сущее наказание).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 13:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странности поведения матриц (C++):

Странные поведения с float - C++
Здравствуйте, объясните пожайлуста почему при выполеннии этого кода: #include &lt;iostream&gt; using namespace std; int main () { ...

решить систему... и иследование поведения функции - C++
Требования к выполнению задания №1: 1. Требуется решить систему линейных алгебраических систем уравнений четвертого порядка методом...

Умножение треугольных матриц«Методы обработки разреженных матриц» - C++
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ к элементам свёрнутой матрицы...

Пользовательская функция работает не так, как ожидается: найти причины странного поведения функции - C++
Ребята помогите, пожалуйста. Создаю функцию суммы дробных чисел, но она ничего не возвращает, экран пустой. Я знаю, что туплю, но все же. ...

Транспонирование матриц. Произведение транспонированных матриц - C++
Найти матрицу С: C=ATBTB; A=\begin{bmatrix}1\\ 1\\ 1\end{bmatrix} B=\begin{bmatrix}1 &amp; 2 &amp; 0 \\ 0 &amp; 1 &amp; 2\end{bmatrix} ...

Странности с CodeBlocks - C++
Прохожу эти туториалы по SDL версии SDL одинаковые. Пример функции: void CEvent::OnKeyDown(SDLKey sym, SDLMod mod, Uint16 unicode) {...

1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.04.2014, 14:03 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Поле - указатель, а конструктора копирования нет. Правило трёх:
http://ru.wikipedia.org/wiki/Правило_трёх_(C%2B%2B_программирование)

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
matrix::matrix(const matrix& op)
{
    cRow = op.cRow;
    cCol = op.cCol;
    pmatrix = new int [cCol * cRow];
    for (unsigned int i = 0; i < cRow * cCol; i++)
        pmatrix[i] = op.pmatrix[i];
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2014, 14:03
Привет! Вот еще темы с ответами:

Странности с typedef - C++
В задании нужно определить с помощью typedef массив char.Пишу в header-файле:typedef char masschar;Потом делаю так:masschar cfg;И код...

Странности с динамическими массивами. - C++
Добрый день! В общем как то при выполнении одной лабы, я столкнулся с одной непостижимой моему уму проблемой. Я написал программку...

GetPixel и его странности - C++
дело такое: есть функция которая должна искать цвет в RGB на определённом пикселе (где находится курсор) выглядит она так POINT...

Странности с разрядностью и float - C++
В общем начну с того что делать было не чего и тут я вспомнил что как то давно реализовывал класс Vector2d(из библиотеки SFML), Vector3d и...


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

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

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