Constructor matrice
Last Updated: Oct 22 2019 19:45, Started by
exydos
, Oct 21 2019 15:24
·
0
#1
Posted 21 October 2019 - 15:24
am functia asta publica la clasa Matrice a mea : Matrice(const Matrice&), de ce nu merge asa sa fac?
Matrice::Matrice(const Matrice &m) { *this = m; } Daca fac asa functia merge. Matrice::Matrice(const Matrice &m) { l = m.l; c = m.c; buf = new int*[l]; for (int i=0; i < l; i++) { buf[i] = new int[c]; for(int j = 0; j < c; j++) buf[i][j] = m.buf[i][j]; } } Edited by exydos, 21 October 2019 - 15:31. |
#2
Posted 21 October 2019 - 15:31
primul e copy constructor, ceea ce apelezi este operatorul "=". Scrie si operatorul "="
|
#3
Posted 21 October 2019 - 15:41
am scris, dar nu am inteles cum functioneaza
Matrice& Matrice::operator=(const Matrice& m) { l = m.l; c = m.c; buf = new int*[l]; for(int i = 0; i < l; i ++){ buf[i] = new int[c]; for(int j = 0; j < c; j ++) buf[i][j] = m.buf[i][j]; } return *this; } Adica ca sa ma pot juca cu clasele , sa le adun , sa le inmultesc scad , egalez trebuie sa fac operatorii = , + , * , -. Dar parca in cazu asta puteai in C cand aveai liste sa faci una noua si sa copiezi informatia deodata gen : typedef struct cel{ int info; struct cel *urm; }TCel, *TLista; si daca o foloseai intr-o functie puteai scrie TLista aux = prima; |
#4
Posted 21 October 2019 - 15:43
TLista e pointer care lista, si atunci ai o atribuire simpla de adrese.
|
#5
Posted 21 October 2019 - 15:56
operator= si constructorul de copiere fac in esenta acelasi lucru, ar trebui sa aiba aceiasi implementare.
Doar ca constructorul de copiere e folosit in initializarea unei variabile(noi), asta include si transferul parametrilor pe stiva prin copiere. Operatorul = e apelat in cazul in care faci asignare. |
#6
Posted 21 October 2019 - 16:07
maccip, on 21 octombrie 2019 - 15:56, said:
operator= si constructorul de copiere fac in esenta acelasi lucru, ar trebui sa aiba aceiasi implementare. Doar ca constructorul de copiere e folosit in initializarea unei variabile(noi), asta include si transferul parametrilor pe stiva prin copiere. Operatorul = e apelat in cazul in care faci asignare. |
#7
Posted 21 October 2019 - 16:55
Matrice aux=a1; //constructorul de copiere aux=a2 // operatorul = |
#8
Posted 21 October 2019 - 17:54
Constructorul initializeaza pentru prima data
operator= atribuie alta valoare cand deja era initializat. Edited by dani.user, 21 October 2019 - 17:54. |
#9
Posted 21 October 2019 - 18:59
Mersi , mai am o problema. , primesc asa warning in CLion: warning C4717: 'operator>>': recursive on all control paths, function will cause runtime stack overflow.
Am declarat functia friend istream& operator>>(istream&,const Fractie&); in public la clasa Fractie , o implementez asa : ostream& operator<<(ostream& out,const Fractie& f) { out<<f.a; return out; } am incercat solutiile de pe net si tot nu merge. |
#11
Posted 21 October 2019 - 19:50
#12
Posted 21 October 2019 - 19:53
Ai dat paste la operator<<, arata-ne operator>> mentionat in eroare.
|
#13
Posted 21 October 2019 - 22:33
buf = new int*[l];Ai grija cand faci asa ceva in operatorul =, pentru ca s-ar putea sa te trezesti cu niste memory leak-uri de toata frumusetea. Ce se intampla daca buf deja a fost alocat? |
#14
Posted 22 October 2019 - 15:29
parabellum, on 21 octombrie 2019 - 22:33, said: buf = new int*[l];Ai grija cand faci asa ceva in operatorul =, pentru ca s-ar putea sa te trezesti cu niste memory leak-uri de toata frumusetea. Ce se intampla daca buf deja a fost alocat? dani.user, on 21 octombrie 2019 - 19:53, said:
Ai dat paste la operator<<, arata-ne operator>> mentionat in eroare. istream& operator>>(istream& stream,const complex& c) { stream >> c.re >> c.im; return stream; } |
#15
Posted 22 October 2019 - 18:51
Eu nu vad nicio recursivitate in codul asta.
Cred ca-i de la niste conversii implicite implementate in clasa complex. |
|
#16
Posted 22 October 2019 - 19:45
Initial era vorba de Fractie, acum e cod ce implica complex&. Care-i codul complet care da eroare?
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users