Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





(friends Vs Poo) && (const Copias)

Iniciado por Warchief, 19 de Noviembre de 2004, 11:19:14 AM

« anterior - próximo »

Warchief

 Saludos compañeros,

estoy peleandome con unos malos libros de c++ para aprender un poco del lenguaje. De momento he aprendido la sintaxis, lo demás ya vendrá después  :) . Como vengo de Java y C, encuentro la mayoría de las cosas parecidas, así que no hay muchos problemas, pero me han quedado dos dudas que los libros estos no me solucionan. Vamos con ellas, maestros:

1) No es en realidad una duda, es más una opinión/discusión. Me gustaría saber si es de utilidad usar esto tan gracioso de la amistad. Es decir, que "friend" se carga de un plumazo la encapsulación de la POO. ¿La usáis? ¿La véis útil? ¿A quién demonios se le ocurrió que eso era útil?

2) Sobre constructor de copia y los punteros copiados. Resulta que el constructor por defecto copia el puntero del original, por lo que la copia apunta a la misma zona de memoria, lo que supone un peligro si se libera la memoria apuntada al destruir uno de los dos. La solución entonces es sobreescribir el constructor de copia para reservar memoria distinta para el pseudoclon. Hasta ahí vamos bien.
La cuestión es que yo quiero que la copia apunte también a esa zona de memoria, pero que en el destructor, sólo el último en destruirse libere la memoria dinámica asociada al puntero de todos los clones. Entonces se me ha encendido la bombilla y he pensado en un contador, pero aparte de parecerme cutre (comunmente llamado "parche"), no tengo claro donde meter el contador del número de copias que se han hecho, y como el parametro del constructor de copia tiene que ser const, no puedo poner nada del estilo de flags.

Si no véis la utilidad de que apunten todos los clones al mismo sitio puedo poner un ejemplito que se me ha ocurrido, pero no es una dificultad que tenga en un programa ni nada de eso, así que si alguien ya se ha pelado con ello que me lo comente, pero no os molestéis en investigarlo ahora; simplemente me ha surgido la duda al pasar por el tema de los constructores de copia, como en java las referencias se cuentan ellas solas :D

Gracias.

Haddd

 Yo echo de menos friend en C#. Es que no hay otra forma de acceder a los miembros privados. Me obliga a crear Atributos, que es algo que no me mola mucho. no entiendo porque tengo que crear un atributo de una propiedad donde el get/set es exactamente lo mismo que utilizar directamente esa propiedad

Warchief

 Por qué no metes los atributos públicos en la parte pública? (en c++ digo)

Haddd

 Bueno, en realidad si yo hago eso:

class p {
  public:
               Matriz matriz;
};

y accedo al miembro matriz, es posible que en un futuro yo quiera que se haga algo más, como:

class p {
  private:
               Matriz matriz;
  public:
              Matriz DevolverMatriz() { recalcular; return matriz ; };
               
};

Eso obligaría al que ha desarrollado con la versión anterior a modificar todo el código que utilizaba la propiedad matriz. Al forzar a que utilice un método, aunque ese método no haga nada más que devolver el valor, gestionamos que nuevas versiones de la clase no interfieran para nada en su utilización.

Grugnorr

 Uhm, Hadd, por defecto las variables miembro son Internal, públicas dentro del assembly y privadas fuera.

Poniendo propiedades(encapsulando la manipulación de variables con funciones) simplificas mucho el código en cuanto quieras hacer algo más que la asignación||lectura: comprobaciones, inicializaciones... .Y si a posteriori ves que necesitas añadir algo, te basta con cambiarlo sólo en la propiedad en vez de en los mil sitios que aparece la variable

PD: Lo último ya veo que lo dices :)
hat the hells!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.