¿ copia por valor de Matriz dinamica como lo hago?
Buenas
He creado una Martriz dinamica de la forma Código:
TClassPadre Código:
ClassHija Código:
ClassHija::AsigDatos Código:
ClassHija::DUDA Mi pregunta es: Como puedo Hacer que Mtz2 se inicialice con los datos de Mtz1 y al modificar sus datos (Matriz Auxiliar) no afecte a los datos de Mtz1. Si no es posible hay alguna otra forma... Gracias |
Hola,
tal como dices, estas asignando punteros, por lo que las dos variables (matz2 y matz1) en realidad comparten las mismas posiciones de memoria, y son en esencia la misma variable que la representan dos simbolos diferentes. Para copiar los datos, tendrias que usar las funciones de C para copiar, copiando asi los datos de unas posiciones de memoria en otras. Creo que era strcpy la funcion correcta para estas cosas. Espero que te sirva, un saludo. |
Gracias por contestar...
La utilizacion de strcpy es una opcion pero creo que la copia se realizaria caracter a caracter rrecorriendo toda la matriz, que para matrices de gran tamaño (millones) requiere un poco de tiempo. Desta forma tengo la opcion tambien Código:
typedef char TMatriz[15][15]; Gracias otra vez |
hola, sigo pensando que te confundes, la mejor solución es usar strcpy en tu funcion de assign (lo que llamas "copia real"), ya que es la funcion estandar de C para copiar grandes bloques de memoria, y esta mas que optimizada desde hace mucho tiempo, aunque hay otras funciones en librerias especializadas. De todas maneras, sí es mas entendible copiar caracter por caracter en un bucle for. Dejo este post unicamente por si se relee, para que no hayan confusiones. Un saludo.
|
En realidad los dos hacéis referencia a dos cosas importantes.
1.- La implementación de un constructor copia y la sobrecarga del operador "=" permiten realizar cosas como esta: Código:
TMatriz Matz1; No es necesario crearlas con punteros como se exige en el caso de trabajar con la VCL. 2.- El código usado en el constructor copia o la sobrecarga del operador "=" debe realizar una copia real a nivel de memoria de una matriz en la otra. Bien con strcpy, memcpy o la API CopyMemory. Para el caso de strcpy decir que sólo es válido para cadenas estilo C (terminadas en nulo) pues encontrado el nulo termina la copia que es carácter a carácter. Saludos. |
Buenas... Teniendo encuenta lo dicho anteriormente he implemetado una clase Matriz de la forma
Código:
He intentado implementar la funcion constructor de copia (reservando memoria con memcpy) y la funcion sobrecarga asignacion y no lo consigo...me podeis ayudar Gracias |
Básicamente la cosa sería algo así:
Código:
class TMatriz Código:
TMatriz Mt1(10,10); Saludos. |
No te olvides de implementar un destructor. ;)
Saludos. |
Muchisimas Gracias........ eres un Crack.
Tendre que seguir trabajando con el tema de los punteros, no acabo de entenderlos del todo Gracias otra vez |
La franja horaria es GMT +2. Ahora son las 14:48:51. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi