Dev - C++ - ayuda con sobrecarga de operador =

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con sobrecarga de operador =

Publicado por Luis (5 intervenciones) el 12/02/2020 04:52:45
ayuda, tengo que generar un matriz, en principio se le envia un valor directamente y se debe llenar de 0´s y despues liberar esa mamoria y reservar nueva memoria dinamica y leer los datos de la nueva matrz, modificando un datos despues de hacerlo ingresando la fila y columna del dato, el problema es que son dos objetos de la case y en la ultima funcion la cual es la sobrecarga del operador = debe igualarse la matriz a la matriz b. ya tengo todo solo que no se como utilizar esta sobrecarga

tengo 3 archivos.
la biblioteca matrizQ,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MATRIZQ_H
#define MATRIZQ_H
#include<iostream>
using namespace std;
 
class MatrizQ
{
 public:
 MatrizQ(int tamanio = 0);
 ~MatrizQ();////////////////////////////////////////////////
 void pideleAlUsuariosTusDatos(void);
 void muestraTusDatos(void);
 int dameTuDatoRC(int renglon, int columna);
 int dameTuTamanio(void);
 void modificaTuDatoRC(int renglon, int columna, int valor);
 MatrizQ& operator=(MatrizQ Q);//////////////////////////////////
 private:
 void verificaTusDatos(void);
 void liberaMemoria(void);////////////////////////////
 int** matriz;
 int tamanio;
};
 
#endif // MATRIZQ_H


matrizQ.cpp

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
#include "MatrizQ.h"
 
MatrizQ::MatrizQ(int tamanio)
{
    this->tamanio=tamanio;
    this->matriz=NULL;
    matriz=new int*[tamanio];
    for(int i=0;i<tamanio;i++)
    {
        matriz[i]=new int[tamanio];
    }
 
    for(int i=0;i<this->tamanio;i++)
    {
        cout<<endl;
        for(int j=0;j<this->tamanio;j++)
        {
            matriz[i][j]=0;
        }
    }
 
}
 
MatrizQ::~MatrizQ()
{
 
}
int MatrizQ::dameTuTamanio()
{
    cin>>this->tamanio;
    return this->tamanio;
}
 
void MatrizQ::verificaTusDatos()
{
        if(this->tamanio<0)
        {
            cout<<"el tamanio de la matriz no puede ser negativo, por favor ingresa otro valor: ";
 
        }
}
 
void MatrizQ::pideleAlUsuariosTusDatos()
{
    if(matriz!=NULL)
    {
        for(int i=0;i<this->tamanio;i++)
		delete []matriz[i];
        delete []matriz;
    }
 
    cout<<endl<<"Dame el orden de la matriz A"<<endl<<"tamanio: ";
 
    do
    {
        this->dameTuTamanio();
        this->verificaTusDatos();
 
    }while(this->tamanio<0);
 
 
    /**RESERVA DE MEMORIA DINAMICA*/
    matriz=new int*[this->tamanio];
    for(int i=0;i<=this->tamanio;i++)
    {
        matriz[i]=new int[this->tamanio];
    }
 
/**LECTURA DE LOS DATOS DE LA MATRIZ*/
cout<<"ingresa los datos de la matriz"<<endl;
    for(int i=0;i<this->tamanio;i++)
    {
        for(int j=0;j<this->tamanio;j++)
        {
            cout<<"ingresa el dato en la posicion ["<<i+1<<"]["<<j+1<<"]:";
            cin>>matriz[i][j];
        }
    }
}
 
 
void MatrizQ::muestraTusDatos()
{
 
     for(int i=0;i<this->tamanio;i++)
    {
        cout<<endl;
        for(int j=0;j<this->tamanio;j++)
        {
            cout<<"["<<matriz[i][j]<<"] ";
        }
    }
    cout<<endl;
}
 
int MatrizQ::dameTuDatoRC(int renglon, int columna)
{
    renglon=renglon;
    columna=columna;
 
    return matriz[renglon][columna];
}
 
void MatrizQ::modificaTuDatoRC(int renglon, int columna, int valor)
{
    renglon=renglon;
    columna=columna;
    this->matriz[renglon][columna]=valor;
}
 
MatrizQ& MatrizQ::operator=(MatrizQ Q)
{
 
    if()
 
    }
    else
        {
 
 
            }
 
 
        }
    for(int i=0;i<this->tamanio;i++)
    {
        for(int j=0;j<this->tamanio;j++)
 
 
            this->modificaTuDatoRC(i,j,Q.dameTuDatoRC(i,j));
    }
    return *this;
}


y el main.cpp

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
#include <iostream>
#include "MatrizQ.h"
using namespace std;
 
int main()
{
    MatrizQ A(2),B(3);
 cout << "Matriz A " << endl;
 A.muestraTusDatos();
 cout << "Matriz B " << endl;
 B.muestraTusDatos();
 
 A.pideleAlUsuariosTusDatos();
 cout << "Matriz A " << endl;
 A.muestraTusDatos();
 cout << "El orden de la matriz es: " << A.dameTuTamanio()<< endl;
 cout << "Dame el dato almacenado en la posicion 2,2 es: "
 << A.dameTuDatoRC(2,2) << endl;
 /*cout << "Dame el dato almacenado en la posicion -2,2 es:";
 << A.dameTuDatoRC(-2,2);
 cout << "Dame el dato almacenado en la posicion 2,-2 es:"
 << A.dameTuDatoRC(2,-2); */
 A.modificaTuDatoRC(2,2,100);
 cout << "Matriz A " << endl;
 A.muestraTusDatos();
 B = A;
 cout << "Matriz B " << endl;
 B.muestraTusDatos();
    return 0;
}

se supone debe imprimir algo como esto



pantalla
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con sobrecarga de operador =

Publicado por Rodrigo (539 intervenciones) el 12/02/2020 15:45:39
Tu clase no son solo los datos.
Cuando copies, libera la memoria que ya tienes, copia el tamano de la matriz, pide memoria y luego copia los datos.
Te conviene pasar el parametro por referencia, de este modo puedes preguntarle al parametro que direccion tiene, y si la direccion calza con thiz, entonces te puedes ahorrar todo lo que dije antes, pues quiere decir que el usuario de la clase esta haciendo

a = a;

y para ese caso, tu no quieres borrar ni perder el tiempo copiando a si mismo, para ese caso se sale de inmediato retornando *this.

Cuando la direccion de memoria de lo pasado no es igual a this, liberas la memoria, copias el nuevo tamano, pides memoria y copias los datos.

Tienes que pasar una referencia, tal como lo tienes ahora, es una copia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar