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

No se compila el siguiente codigo

Estas en el tema de No se compila el siguiente codigo en el foro de C/C++ en Foros del Web. #include<iostream> using namespace std; float const pi=3.14159; class Objetogeometrico { public: virtual float calcularArea() const; virtual float perimetro () const; }; class Circulo:public Objetogeometrico { ...
  #1 (permalink)  
Antiguo 17/02/2014, 02:22
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
No se compila el siguiente codigo

#include<iostream>


using namespace std;
float const pi=3.14159;

class Objetogeometrico
{
public:
virtual float calcularArea() const;
virtual float perimetro () const;

};


class Circulo:public Objetogeometrico
{
private:
float Radio;
public:
Circulo(float);
float SetRadio(){return Radio;}
float GetRadio(){return Radio;}

float calcularArea();
float perimetro();

};

Circulo::Circulo(float r )
{

Radio = r;

}


float Circulo::calcularArea()
{
cout<<"digite radio"<<"\n"<<endl;
cin>>Radio;
return 2*pi*Radio;

}


float Circulo::perimetro()
{

return 2*pi*Radio*Radio;

}


class Cuadrado:Objetogeometrico
{
private:
float Base;

public:
Cuadrado(float);
float SetBase(){return Base;}
float GetBase(){return Base;}
float calcularArea();
float perimetro();



};

Cuadrado::Cuadrado(float b)
{


Base=b;



}

float Cuadrado::calcularArea()
{

cout<<"digite base"<<"\n"<<endl;
cin>>Base;
return Base*Base;

}

float Cuadrado::perimetro()
{

return 4*Base;



}

class Rectangulo:Objetogeometrico
{
private:
float Base;
float Lado;

public:
Rectangulo(float,float);
float SetBase(){return Base;}
float GetBase(){return Base;}
float SetLado(){return Base;}
float GetLado(){return Base;}
float calcularArea();
float perimetro();


};


Rectangulo::Rectangulo(float b,float l)

{

Base=b;
Lado=l;


}

float Rectangulo::calcularArea()
{

cout<<"digite base"<<"\n"<<endl;
cin>>Base;
cout<<"Digite lado"<<"\n"<<endl;
cin>>Lado;
return Base*Lado;



}


float Rectangulo::perimetro()
{


return 2*Base+2*Lado;

}

int main()
{

Circulo c();

cout <<c.calcularArea()<<endl;


return 0;
  #2 (permalink)  
Antiguo 17/02/2014, 15:13
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 10 años, 7 meses
Puntos: 9
Respuesta: No se compila el siguiente codigo

¿Te da algún error? ¿cuál?.

De todos modos prueba a cerrar la llave del int main, he incluye una librería para que no se te cierre la consola si trabajas con ello.

De todos modos prueba el siguiente código, es el mismo tuyo solo cambiando unas cosas que he visto. Saludos.


Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3.  
  4.  
  5. using namespace std;
  6. float const pi=3.14159;
  7.  
  8. class Objetogeometrico
  9. {
  10. public:
  11. virtual float calcularArea() const;
  12. virtual float perimetro () const;
  13.  
  14. };
  15.  
  16.  
  17. class Circulo:public Objetogeometrico
  18. {
  19. private:
  20. float Radio;
  21. public:
  22. Circulo(float);
  23. float SetRadio(){return Radio;}
  24. float GetRadio(){return Radio;}
  25.  
  26. float calcularArea();
  27. float perimetro();
  28.  
  29. };
  30.  
  31. Circulo::Circulo(float r )
  32. {
  33.  
  34. Radio = r;
  35.  
  36. }
  37.  
  38.  
  39. float Circulo::calcularArea()
  40. {
  41. cout<<"digite radio"<<"\n"<<endl;
  42. cin>>Radio;
  43. return 2*pi*Radio;
  44.  
  45. }
  46.  
  47.  
  48. float Circulo::perimetro()
  49. {
  50.  
  51. return 2*pi*Radio*Radio;
  52.  
  53. }
  54.  
  55.  
  56. class Cuadrado:Objetogeometrico
  57. {
  58. private:
  59. float Base;
  60.  
  61. public:
  62. Cuadrado(float);
  63. float SetBase(){return Base;}
  64. float GetBase(){return Base;}
  65. float calcularArea();
  66. float perimetro();
  67.  
  68.  
  69.  
  70. };
  71.  
  72. Cuadrado::Cuadrado(float b)
  73. {
  74.  
  75.  
  76. Base=b;
  77.  
  78.  
  79.  
  80. }
  81.  
  82. float Cuadrado::calcularArea()
  83. {
  84.  
  85. cout<<"digite base"<<"\n"<<endl;
  86. cin>>Base;
  87. return Base*Base;
  88.  
  89. }
  90.  
  91. float Cuadrado::perimetro()
  92. {
  93.  
  94. return 4*Base;
  95.  
  96.  
  97.  
  98. }
  99.  
  100. class Rectangulo:Objetogeometrico
  101. {
  102. private:
  103. float Base;
  104. float Lado;
  105.  
  106. public:
  107. Rectangulo(float,float);
  108. float SetBase(){return Base;}
  109. float GetBase(){return Base;}
  110. float SetLado(){return Base;}
  111. float GetLado(){return Base;}
  112. float calcularArea();
  113. float perimetro();
  114.  
  115.  
  116. };
  117.  
  118.  
  119. Rectangulo::Rectangulo(float b,float l)
  120.  
  121. {
  122.  
  123. Base=b;
  124. Lado=l;
  125.  
  126.  
  127. }
  128.  
  129. float Rectangulo::calcularArea()
  130. {
  131.  
  132. cout<<"digite base"<<"\n"<<endl;
  133. cin>>Base;
  134. cout<<"Digite lado"<<"\n"<<endl;
  135. cin>>Lado;
  136. return Base*Lado;
  137.  
  138.  
  139.  
  140. }
  141.  
  142.  
  143. float Rectangulo::perimetro()
  144. {
  145.  
  146.  
  147. return 2*Base+2*Lado;
  148.  
  149. }
  150.  
  151. int main()
  152. {
  153.  
  154. Circulo c();
  155.  
  156. cout <<c.calcularArea()<<endl;
  157.  
  158. return 0;
  159. }
  #3 (permalink)  
Antiguo 19/02/2014, 17:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: No se compila el siguiente codigo

cout <<c.calcularArea()<<endl;

marca error en esta linea
  #4 (permalink)  
Antiguo 20/02/2014, 03:15
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: No se compila el siguiente codigo

Creo que el error lo tienes en la forma de crear el objeto Circulo, que a su vez delata una mala implementación del constructor.

Tu constructor dice:
Código C++:
Ver original
  1. Cuadrado(float);
Lo que está obligando siempre a crear el objeto Circulo con un valor float.

Entonces, cuando creas el objeto en main así:
Código C++:
Ver original
  1. Circulo c();
Se crea con un valor no válido. Pero el problema salta cuando quieres calcular su área.

Es más discutible lo otro que he dicho, lo de que la implementación del constructor es mala. Puede que te interese que siempre tenga un valor expreso y definido. En cuyo caso no olvides de iniciarlo con un valor en el interior.
Código C++:
Ver original
  1. Circulo c1(5.6) //<-Valido
  2. float radio =2.77;
  3. Circulo c2(radio)//<-Valido

Pero igual es más interesante que el constructor tenga un valor por defecto, por si no siempre te interesa inicializar su valor del radio.

Código C++:
Ver original
  1. Circulo(float r=0);
y
Código C++:
Ver original
  1. Circulo::Circulo(float r )
  2. {
  3. Radio = r;
  4. }

Así, si inicias de objeto de esta forma:
Código C++:
Ver original
  1. Circulo c;
Pues tendrás un objeto con el radio=0 (o al valor que le pongas al constructor. Y no te dará error.

Y ya puestos con respecto al programa, pues no tiene mucho sentido que la función calcularArea() pida el radio, ya que se entiende que no es una función para calcular un área cualquiera, sino para calcular el área del Circulo que has creado. Es más lógico que si quieres redefinir el radio, lo hagas por medio de su función set correspondiente, y que la función calcularArea() se limite a calcular el área del objeto con el radio dado..

Y ahora que lo miro, la función setArea() la tienes mal, ya que está devolviendo un valor, y a ti te interesa que modifique el valor de radio. Sería así:
Código C++:
Ver original
  1. void SetRadio(float valor){Radio=valor;}

Saludos

Etiquetas: ayuda-general, compila, siguiente
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




La zona horaria es GMT -6. Ahora son las 05:59.