|
|
|
Помогите вернуть занчение функции
|
|||
|---|---|---|---|
|
#18+
Есть прога: class TMatrix { int** mad; int N, M; public: TMatrix(int, int); void Print(); TMatrix operator+(TMatrix&); TMatrix operator-(TMatrix&); TMatrix operator*(TMatrix&); TMatrix& operator=(TMatrix&); ~TMatrix(); }; TMatrix::TMatrix(int n, int m) { N=n; M=m; mad=new int*[N]; for (int i=0;i<M;i++) mad=new int [M]; for (int i=0;i<N;i++) for (int j=0;j<M;j++) mad[j]=rand()%10; }; void TMatrix::Print() { for (int i=0;i<N;i++) { for (int j=0;j<M;j++) cout<<mad[j]<<' '; cout<<endl; } }; TMatrix::~TMatrix() { for (int j=0;j<M;j++) delete mad[j]; delete mad; }; TMatrix& TMatrix::operator=(TMatrix& mas) { mad=new int*[mas.N]; for (int i=0;i<mas.M;i++) mad=new int [mas.M]; N=mas.N; M=mas.M; for(int i=0;i<N;i++) for(int j=0;j<M;j++) mad[j]=mas.mad[j]; return *this; } TMatrix TMatrix::operator+(TMatrix& mas) { if ((N==mas.N)&&(M==mas.M)) { TMatrix tmp=*this; for(int i=0;i<N;i++) for(int j=0;j<M;j++) tmp.mad[j]+=mas.mad[j]; return tmp; } } Оператор плюс должен вернуть матрицу, но после окончания функции переменная tmp исчезает удаляя за собой динамическую память выделеню под нее, в итоге я получаю обьект который содержит ссылку на область памяти которая содержит неясно что. Внимание вопрос: Как мне избавится от этой проблемы? и как написать конструктор копирования для такого класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 21:03 |
|
||
|
Помогите вернуть занчение функции
|
|||
|---|---|---|---|
|
#18+
ребята, ну там же есть кнопка [srс] блин , ну нечетабельно ... ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 22:06 |
|
||
|
Помогите вернуть занчение функции
|
|||
|---|---|---|---|
|
#18+
По значению надо возвращать объекты в таких случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2005, 22:45 |
|
||
|
Помогите вернуть занчение функции
|
|||
|---|---|---|---|
|
#18+
Обязательно добавь copy-constructor: Код: plaintext 1. Код: plaintext 1. Просто когда ты в operatorе + возвращаешь tmp - локальную переменную, то здесь и вызывается копи-конструктор, затем объект tmp убивается. А у тебя при отсутствии копи-контруктора у результирующей матрице: result.mad = tmp.mad (а tmp.map в деструкторе уже высвобожден). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2005, 14:06 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33315036&tid=2032648]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 408ms |

| 0 / 0 |
