[C con Clase] [Bulk] bloqueo

David Zelion_cracking en yahoo.es
Jue Mayo 31 08:52:43 CEST 2007


Hola que hay, veamos si se me explicar jejeje.
Lo que tu buscas es algo parecido a esto no?


#include <iostream>
using std::cout;
using std::endl;

// Definición de la clase Palabra sin usar amistad 
class Palabra 
{
	public:
		// 1. constructor
		Palabra()
		{ x[0] = 'M'; x[1] = 'a'; x[2] = 'm'; x[3] = 'a'; x[4] = 'r'
;x[4] = '\0'; } // esto es lo que quisiera
		

		// 2. despliega x
		void imprime() const
		{  cout << x << endl; }

		// 3. devuelve el alias para invocar el nombre de x desde
donde lo llaman
		char* ObtieneX()
		{  return x; }

	private:
		char x[5];  // esto es lo que quiero
		
}; // fin de la clase Palabra

// 4. la función noMiembro modifica datos privados de Palabra, // a travez
de la funcion Obtienex, pero no se como hacerlo con arreglos 
void noMiembro( Palabra p, char val[] ) 
{
	for (int a=0;val[a] != '\0' ;a++)
	{	 
		*(p.ObtieneX() + a) = val[a];		
	}
	
}

int main()
{
	Palabra progenitora;            // crea el objeto Cuenta
	progenitora.imprime();

	noMiembro( progenitora, "madre\0" ); // esto quisiera
	
	progenitora.imprime();

	system("pause");
	return 0;

}

Pero esto tiene varios problemas, uno de ellos es el principio de
encapsulacion ya que estas modificando la variable de dentro de la clase a
tu antojo desde fuera de esta, con lo que podria llegar a ser un problema en
un codigo complejo.
Las variables miembro dentro de una clase las deberia modificar la propia
clase solo. Espero haberte servido de ayuda.

----------------------------------------------------------------------------
---------------------------

>-----Mensaje original-----
>De: cconclase-bounces en listas.conclase.net [mailto:cconclase-
>bounces en listas.conclase.net] En nombre de rodolfo rosso paz
>Enviado el: jueves, 31 de mayo de 2007 7:05
>Para: cconclase en listas.conclase.net
>Asunto: [Bulk] [C con Clase] bloqueo
>
>/* Hola a Todos.-
>
>Como siempre quiero comenzar agradeciendo a los que contestaron mi último
>correo,
>en este caso fue Steven, como siempre tan didactico, punto aclarado,
>gracias.
>
>Pero ahora tengo un bloqueo casi existencial con los punteros y las
>referencias
>a punteros y todo eso. Ojalá me pueda hacer entender.
>
>Este programa de mas abajo define una clase que tiene 3 funciones miembro,
>y
>hay una
>cuarta funcion no miembro que cambia un campo privado de la clase usando la
>funcion miembro
>ObtieneX como un lvalue y asignandole en la funcion 4. noMiembro un valor
>recibido en val
>
>   p.ObtieneX() = val;            //   asi como esta funciona el programa,
>pero:
>
>exactamente eso quiero hacer pero en vez de con un char, lo quiero hacer
>con
>un arreglo x[5]
>el problema es que no tengo idea de como hacerlo porque como el nombre de
>x[5] es un puntero
>constante, no se como se lo puede referenciar para convertirlo en un
>lvalue.
>Ya he probado
>decenas de formas pero nada.
>
>Ojala me hayan entendido, gracias de antemano por la molestia
>
>Rodolfo
>
>PD. no quiero declarar la funcion NoMiembro como amiga, eso seria
>llevarmela
>muy facil
>
>*/
>#include <iostream>
>using std::cout;
>using std::endl;
>
>// Definición de la clase Palabra sin usar amistad
>class Palabra
>{
>public:
>   // 1. constructor
>   Palabra()
>   // { x[1] = 'M'; x[2] = 'a'; x[3] = 'm'; x[4] = 'a'; x[5] = '0'; } //
>esto es lo que quisiera
>   { x = 'M'; }   // solo esto puedo
>
>   // 2. despliega x
>   void imprime() const
>   {  cout << x << endl; }
>
>   // 3. devuelve el alias para invocar el nombre de x desde donde lo
>llaman
>   char& ObtieneX()
>   {  return x; }
>
>private:
>   //char x[5];  // esto es lo que quiero
>   char x;       // solo esto puedo
>}; // fin de la clase Palabra
>
>// 4. la función noMiembro modifica datos privados de Palabra,
>// a travez de la funcion Obtienex, pero no se como hacerlo con arreglos
>void noMiembro( Palabra& p, char val )
>{
>   p.ObtieneX() = val;
>}
>
>int main()
>{
>   Palabra progenitora;            // crea el objeto Cuenta
>   progenitora.imprime();
>
>   //noMiembro( progenitora, "madre" ); // esto quisiera
>   noMiembro( progenitora, 'R' );           // solo esto puedo
>   progenitora.imprime();
>
>   system("pause");
>   return 0;
>
>} // fin de main
>
>_________________________________________________________________
>Las mejores tiendas, los precios mas bajos, entregas en todo el mundo,
>YupiMSN Compras: http://latam.msn.com/compras/
>
>
>_______________________________________________
>Lista de correo Cconclase Cconclase en listas.conclase.net
>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ





Más información sobre la lista de distribución Cconclase