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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ загрузка из файла не работает http://www.cyberforum.ru/cpp-beginners/thread298224.html
пишу в Qt 4.7, никак не могу написать загрузку из файла, сохранение вроде бы работает, но я не уверена, но загрузка вообще никак. при нажатии в меню Load окно моё закрывается, может подскажете, что я не так делаю? void newForm::Load () { QString fileName = QFileDialog::getOpenFileName (0, "Open Dialog", "", "*.tbl"); if (fileName.length ()) { QFile file (fileName); ...
C++ перестановка чисел в массиве задача: дан массив и число x. переставить числа в массиве таким образом, чтобы сначала массива шли числа, меньшие x, затем равные x, в конце - большие x. если не затруднит подскажите алгоритм решения этой задачи (а можно и код:)) заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread298202.html
Вывод иероглифов вместо русских символов C++
ситуация такая вывожу строки на русском с помощью printf() в коде программы, перед этим пишу setlocale(LC_ALL, "") все нормально, но когда в процессе работы программы ввожу русские данные в консоле и также в программе вывожу их, то выводятся иероглифы... подскажите в чем проблема...
C++ Динамический список опять
Уже, наверно, достал с этими списками). Чуть-чуть, вроде осталось). Вот разобрался, в конце концов, как работают в функции в коде ниже. Теперь не понимаю, как их вызвать в функцию main(), Помогите, пожалуйста. #include < iostream.h > #include < conio.h > #include < stdlib.h > #include < time.h > typedef long BT; struct Zveno{ BT Inf; Zveno *Next; };
C++ Вычислить среднее арифметическое положительных элементов матрицы, стоящих выше главной диагонали http://www.cyberforum.ru/cpp-beginners/thread298177.html
Дана квадратная матрица порядка N. Вычислить среднее арифметическое положительных элементов матрицы, стоящих выше главной диагонали. Помогите написать с функциями и указателями... (на Си) Пожаааалуйста^^
C++ Как преобразовать char в string Есть массив char buffer; есть переменная string X; как присвоить значение X допустим такое X=buffer+buffer; подробнее

Показать сообщение отдельно
le_bon_garcon
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 3
17.05.2011, 22:51     Перегрузка операторов для класса матриц
Собственно, суть проблемы. Пишу класс матриц (хочется), оператор присваивания работает только тогда, когда функция (ну или, например, оператор +) возвращает *this и тип возвращаемого значения - ссылка. Иначе, выдаёт:

a.out(1181) malloc: *** error for object 0x7fff5fbffa40: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

Конструктор копирования работает всегда. Почему так происходит?
Заранее спасибо.

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include<stdio.h>
#include<math.h>
class tmatrix
{
  private:
  double *x;
  int n;
 
  public:
 
//конструкторы
 
  tmatrix() {n=0; x=NULL;};
    
    tmatrix(int _n)
    {
        if (_n>0)
        {
        n=_n;
        x=new double[n * n];
        }
        else printf("** error: matrix's dimension is incorrect (%i) **\n",_n);
    };
    
  tmatrix (const tmatrix &_C)
  {
      if (x != NULL) 
      {
          delete []x; 
          x=NULL;
      }
      
      n=_C.n;
      x=new double[ n * n ];
      for (int i=0;i< n * n;i++) 
      {
          x[i]=_C.x[i];
      } ;
  };
    
    ~tmatrix()
    {   
        if (x!=NULL)
        {
            delete []x;
            x=NULL;
        }
       n=0;    
    };
 
void scan(); //читает матрицу с клавы, работает нормально
void print(); // печатает матрицу
 
double& operator[](int _i) {return x[ _i ];};
 
 
    int operator != (tmatrix C)
    {
        if (n!=C.n) {return 1;}
        else
        {
            for(int i=0; i<n;i++)
            {
                for(int k=0; k<n;k++)
                {
                 if ( x[i * n + k] != C[i * n + k] ) {return 1;}
                }
            }
        }
        return 0;
        
    };
 
    
    tmatrix& operator = (const tmatrix &C)
    { 
            delete [] x;            
            n=C.n;
            x=new double[ n * n ];
        
            for (int i=0;i< n * n;i++) 
            {
                x[i] = C.x[i];
            }  
            return *(this); 
        
    };
    
 
    tmatrix& operator += (const tmatrix &C)
    {
        if (n != C.n)
        {
            printf(" ** error: Matrices' dimension for operator '+=' is incorrect ** ");
        }
        else     
        {
            for(int i=0; i<n;i++)
            {
                for(int k=0; k<n;k++)
                {
                    x[i * n + k] += C.x[i * n + k];
                }
            }    
        }
        return *this;
    };
    
 
    tmatrix operator + (const tmatrix &C)
    {
        if (n != C.n)
        {
            printf(" ** error: Matrices' dimension for operator '+' is incorrect ** ");
        }
        else     
        {
            tmatrix temp = *this;
            temp += C; 
            return temp;
        }
        
    };
 
int main()
{       
    tmatrix A(2);  
    A.scan();
   
    
    tmatrix B(2);
    B.scan();
    
    printf(" <B> \n");
    B.print();
    printf(" <A> \n");
    A.print();
    
    B += A;
    printf(" <B+=A> \n");
    B.print();
    tmatrix D= A+B;
    D.print();
    //Это работает
    
 
 
    tmatrix C;
    C = A + B;
    printf(" <C = A + B :> \n");
    C.print();
    //вылазит ошибка
 
return 0;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru