[C con Clase] bloqueo

rodolfo rosso paz rodolforossopaz en hotmail.com
Jue Mayo 31 07:05:02 CEST 2007


/* 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/





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