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#ifndef TRIANGLE_H
#define TRIANGLE_H
class Triangle
{
public:
void getArea (void);
private:
float base;
float altura;
float area;
};
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 originalclass Triangle
{
public:
void getArea (void);
void SetAltura(float);
float GetAltura() const;
void SetBase(float);
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 originalvoid Triangle::getArea(void)
{
// area es ahora una variable local de la función no de la clase.
// Esto permite eliminar area de la parte private
float area=(base*altura)/2;
return <<"el area del Triangulo es: " area;
}
- 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 originalint main(void) {
Triangle triangulo;
cin>> base;
cin>> altura;
triangulo.getArea();
return 0;
}
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 originalfloat base, altura;
cin >> base;
cin >> altura;
triangulo.SetBase(base);
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.