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

Cual es el error en mi clase?

Estas en el tema de Cual es el error en mi clase? en el foro de C/C++ en Foros del Web. Hola, alguien sabe cuáles son los errores que tienen mis clases?? Código: class Ejemplo{ public: Ejemplo(int y = 10): dato(y) {} int getDatoIncrementado() const { ...
  #1 (permalink)  
Antiguo 17/09/2018, 14:44
Avatar de Jose_A  
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 159
Antigüedad: 3 años, 6 meses
Puntos: 0
Cual es el error en mi clase?

Hola, alguien sabe cuáles son los errores que tienen mis clases??

Código:
class Ejemplo{
public:
Ejemplo(int y = 10): dato(y) {}
int getDatoIncrementado() const { return ++dato; } 
private:
int dato;
};

Por ejemplo, puedo incluir contructores simultaneamente así?
Código:
Tiempo(int hora = 0, int min = 0, int seg = 0);

Tiempo();
  #2 (permalink)  
Antiguo 26/09/2018, 12:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 489
Antigüedad: 8 años, 2 meses
Puntos: 10
Respuesta: Cual es el error en mi clase?

Hola:


El primer error de la clase Ejemplo te salta porque tienes la cláusula const en el método int getDatoIncrementado() const. Esto protege a los datos para que no puedan ser modificados, y al usar el operador ++ estas tratando de incrementar la variable dato.

Si lo quitas, no tendrás problemas:

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. class Ejemplo
  4. {
  5. public:
  6.     Ejemplo(int y = 10): dato(y) {}
  7.     int getDatoIncrementado()
  8.     {
  9.         return ++dato;
  10.     }
  11. private:
  12.     int dato;
  13. };
  14.  
  15.  
  16. int main()
  17. {
  18.     Ejemplo algo(3);
  19.     Ejemplo algo2;
  20.     std::cout<<algo.getDatoIncrementado()<<"\n";
  21.     std::cout<<algo2.getDatoIncrementado()<<"\n";
  22.     return 0;
  23. }



Sobre la segunda cuestión, pues sí. Puedes definir tantos constructores como necesites dentro de la clase.
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 09/10/2018, 02:43
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 528
Antigüedad: 13 años
Puntos: 19
Información Respuesta: Cual es el error en mi clase?

Este post ya es un poco viejo pero quiero aclarar algo, no aconsejo que uses un método de esa forma.

Si bien es posible realizar un méto que hace cambios en un atributo y lo retorna, desde mi punto de vista lo más correcto sería algo como:

Código C++:
Ver original
  1. class Ejemplo
  2. {
  3. public:
  4.     explicit Ejemplo(const int y = 10): dato(y) {};
  5.  
  6.     int getDato() const {
  7.         return dato;
  8.     };
  9.  
  10.     void incrementarDato(){
  11.         ++dato;
  12.     };
  13. protected:
  14.     int dato;
  15. };

Hay cambios muy pequeños pero creo que de esta forma queda más claro que es lo que hace cada cosa, dividimos las responsabilidades, y el cambio que más subjetivo es el de private->protected, a mi personalmente no me gusta usar private para casi nada o en casos muuuuy específicos, pero si un programador que viene después que tu quiere extender tu clase va a tener problemas si no puede acceder esos atributos.
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida



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