[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