Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/04/2016, 04:39
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Area de un Triangulo en C++

Buenas Berman, vienvenido al foro.

Para futuras preguntas has de saber que el código hay que decorarlo para que sea legible. Las opciones las encontrarás en el desplegable "Highlight". Elige el lenguaje que corresponda en cada caso.

Fíjate en fichero.h:

Código C++:
Ver original
  1. #ifndef TRIANGLE_H
  2. #define TRIANGLE_H
  3.  
  4. class Triangle
  5. {
  6. public:
  7.   void getArea (void);
  8. private:
  9.   float base;
  10.   float altura;
  11.   float area;
  12. };

Tiene varios problemas:
  • No has incluído la línea #endif que cierra al correspondiente #ifdef. Esto provoca un fallo de compilación
  • Si no incluyes el constructor por defecto los valores de base, altura y area serán totalmente aleatorios hasta que asignes valores concretos.
  • Los miembros base, altura y area son privados, luego no es posible acceder a ellos desde fuera. Si además no añades funciones para poder modificar y leer su valor entonces te encuentras con que esa clase no te sirve para nada.
    Prueba a implementar los getters (devuelven el valor del miembro) y setters (modifican la variable) correspondientes:

    Código C++:
    Ver original
    1. class Triangle
    2. {
    3. public:
    4.   void getArea (void);
    5.  
    6.   void SetAltura(float);
    7.   float GetAltura() const;
    8.  
    9.   void SetBase(float);
    10.   float GetBase() const;
  • Dado que el área de un triángulo es un valor dependiente de la base y la altura del mismo no tiene mucho sentido que mantengas la variable area dentro de la clase.
    Código C++:
    Ver original
    1. void Triangle::getArea(void)
    2. {
    3.   // area es ahora una variable local de la función no de la clase.
    4.   // Esto permite eliminar area de la parte private
    5.   float area=(base*altura)/2;
    6.   return <<"el area del Triangulo es: " area;
    7. }
  • No es recomendable que la clase Triangle se comunique directamente con la consola. En su lugar lo ideal sería que getArea devolviese un float. El mensaje lo escribes fuera de getArea(). ¿Por qué? El problema se llama acoplamiento y no lo describo porque pueden ser demasiados conceptos a asimilar. El programa funcionará si lo dejas como ahora mismo... es solo un consejo.

Si ahora revisas el main:

Código C++:
Ver original
  1. int main(void) {
  2.   Triangle triangulo;
  3.   cin>> base;
  4.   cin>> altura;
  5.   triangulo.getArea();
  6.   return 0;
  7. }

Intentas guardar los datos en base y altura. ¿Dónde están declaradas esas variables? No son variables globales ni tampoco son locales de main. Tu estás intentando acceder a los miembros de Triangle... pero no es la forma de hacerlo.

Para empezar Triangle es una clase y puedes crear infinitas instancias diferentes cada una con sus propios valores. Triangle vendría a ser un molde y las instancias las piezas que fabricas con ese molde. Queda claro entonces que base y altura no son variables únicas sino que dependen de la instancia que quieras manejar así como que cada pieza creada con el molde es única y tiene sus própios parámetros, su propio ciclo de vida, etc.

Entonces bien, tienes una instancia que es triangulo y quieres modificar sus variables base y altura. Como hemos explicado antes no vas a poder acceder directamente a dichas variables porque están en la parte privada. Sin embargo asumo que has implementado los correspondientes setter (obligatorios) y setter (opcionales en este caso), en cuyo caso tendrás que hacer uso de dichas funciones para manipular las variables:

Código C++:
Ver original
  1. float base, altura;
  2. cin >> base;
  3. cin >> altura;
  4. triangulo.SetBase(base);
  5. trianguo.SetAltura(altura);

Te recomendaría repasar la teoría correspondiente a las clases en C++ porque andas demasiado verde con el tema y eso, créeme, te va a pasar factura más adelante.

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.