Foros del Web » Programación para mayores de 30 ;) » C/C++ »

asignar un valor a Y, y que X seja Y+1 automaticamente

Estas en el tema de asignar un valor a Y, y que X seja Y+1 automaticamente en el foro de C/C++ en Foros del Web. Hola amigos! Me surgió una duda. ¿ Seria posible que yo tuviera 2 variables int llamadas x e outra y, e que al hacer y=10, ...
  #1 (permalink)  
Antiguo 31/03/2016, 17:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
asignar un valor a Y, y que X seja Y+1 automaticamente

Hola amigos! Me surgió una duda. ¿ Seria posible que yo tuviera 2 variables int llamadas x e outra y, e que al hacer y=10, x pasase a valer y+1 porem sin hacer cosas como x=y+1 o por el estilo, yo simplemente mudo el valor de y e quedria que x pasase a valer a mesmacoisa mais um sem pasos posteriores.

int x;
int y;

y = 10; // y vale 10, e x deveria valer y+1

cout << y; // 10
cout << x; // 11


Para que vea más o menos lo que quedria hacer es algo como:
Y = 10;

X = (&Y) + 1;

cout<<X<<endl; //10

Y = 20;

cout<<x<<endl;//21

pero no quiero hacer cosas como esa cada vez que mude el valor de Y:
Y = 10;

X = Y+ 1;

cout<<X<<endl; //10

Y = 20;
X = Y+ 1;

cout<<x<<endl;//21

Es solo curiosidad >_<. Gracias y que pasen un buen finde
  #2 (permalink)  
Antiguo 31/03/2016, 18:10
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Ehm. No, eso específicamente no se puede hacer.

Hay muchos trucos para simular algo asi.

El mas facil que se me ocurre es que en vez de que x sea una variable, que sea una función.

Entonces cada vez que mandes llamar x, te va a imprimir y+1 (siempre y cuando y sea una variable global).

Te recomiendo que no hagas eso. La idea de la programación es que puedas leer y entender rápidamente que hace el código. Si usas trucos como el que te digo, se vuelve mas difícil leer y entender el código. Y así que digas cuanto te ahorras de teclear, pues tampoco...

Saludos
  #3 (permalink)  
Antiguo 31/03/2016, 18:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

¡Sí! Sé que es algo descabellado XD, pero por saber si se puede.... Gracias
  #4 (permalink)  
Antiguo 01/04/2016, 23:05
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 7 meses
Puntos: 5
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Pero sí, como no se va apoder; en C++ se puede todo

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. class sig {
  4.     const int* n;
  5. public:
  6.     sig(const int& i) : n{&i} {}
  7.     sig(int&&) = delete;
  8.     operator const int() const { return *n + 1; }
  9. };
  10.  
  11. int main()
  12. {
  13.     int y = 10;
  14.     sig x = y; // x es el siguiente de y
  15.  
  16.     std::cout << "x = " << x << std::endl;
  17.  
  18.     y = 20;
  19.     std::cout << "x = " << x << std::endl;
  20. }

Última edición por enrieto; 01/04/2016 a las 23:22
  #5 (permalink)  
Antiguo 02/04/2016, 00:20
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Buena solución enrieto. Lo único que te aconsejaría cambiar el puntero por una referencia... Así evitas que te puedan pasar punteros nulos.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 02/04/2016 a las 08:12
  #6 (permalink)  
Antiguo 02/04/2016, 11:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Hola:

¿Cual es el objeto de esta línea?:
Código C++:
Ver original
  1. sig(int&&) = delete;
__________________
Mi calculadora en Qt
  #7 (permalink)  
Antiguo 02/04/2016, 12:56
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 7 meses
Puntos: 5
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

eferion aconseja:
Cita:
...te aconsejaría cambiar el puntero por una referencia... Así evitas que te puedan pasar punteros nulos.
La clase se instancia con un int, no con un puntero.

dehm pregunta:
Cita:
¿Cual es el objeto de esta línea?:
sig(int&&) = delete;
Es para evitar que alguien vaya a querer hacer
Código C++:
Ver original
  1. sig a = 10;
  #8 (permalink)  
Antiguo 02/04/2016, 14:05
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Cita:
Iniciado por enrieto Ver Mensaje
eferion aconseja:
La clase se instancia con un int, no con un puntero.
No me refería a eso. La clase internamente utiliza un puntero. Si el objeto al que apunta, en este caso un int, y no se va a permitir el cambio de referencia, es más limpio usar una referencia en vez de un puntero.

La razón que subyace es que en mantenimientos posteriores a nadie se le ocurre ponerle un delete a una referencia, mientras que a un puntero...

Yo me refería a algo tal que:

Código C++:
Ver original
  1. class sig {
  2.     const int& n;
  3. public:
  4.     sig(const int& i) : n{i} {}
  5.     sig(int&&) = delete;
  6.     operator const int() const { return n + 1; }
  7. };

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #9 (permalink)  
Antiguo 04/04/2016, 07:25
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Gracias enrieto y gracias eferion, muy interesante la propuesta, aun no lo pillo lo que ha referido dhen sig(int&&) = delete;, entiendo para lo que es pero no entiendo como trabaja, como muchas otras cosas de C++. XD
  #10 (permalink)  
Antiguo 04/04/2016, 10:42
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: asignar un valor a Y, y que X seja Y+1 automaticamente

Cita:
Iniciado por vangodp Ver Mensaje
muy interesante la propuesta, aun no lo pillo lo que ha referido dhen sig(int&&) = delete;, entiendo para lo que es pero no entiendo como trabaja, como muchas otras cosas de C++. XD
Código C++:
Ver original
  1. sig a = 4;

En el código anterior, 4 es un prvalue(hasta C++98) o rvalue(C++11 en adelante). Para no aburrir con toneladas de teoría que ya están en Internet, lo resumo rápidamente.

rvalue únicamente puede ser gestionado por los siguientes constructores:

Código C++:
Ver original
  1. sig(int);
  2. sig(int&&);

La idea es deshabilitar la opción de indexar rvalue ya que sig únicamente almacena un puntero y obtener una referencia de un elemento que en la instrucción siguiente ya no va a existir suena bastante peligroso.

El caso es que el primer constructor queda "tapado" por la implementación de sig(const int&) por lo que no nos tenemos que preocupar por él. El segundo, sin embargo, toca deshabilitarlo explícitamente para evitar errores...

Como detalle adicional, la sintaxis de doble '&' se implementó en el estándar C++11 y va asociada a la semántica move. Internet está sembrada de información acerca de dicha semántica, sus repercusiones, usos y razón de ser.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: automaticamente, int, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:44.