-   
- class ObjetoCeleste; 
-   
- //Clase contenedora de Objetos Celestes. Utiliza memoria estática 
- //por lo que como máximo almacenará hasta 100 
- class ListaObjetos 
- { 
-   ObjetoCeleste *lista[100]; 
-   int num; 
- public: 
-   ListaObjetos(){num=0;} 
-   ObjetoCeleste * operator[](int i) 
-     { 
-     if((i<num)&&(i>-1))return lista[i]; 
-     else return NULL; 
-     } 
-   bool AgregarObjeto(ObjetoCeleste *obj) 
-     { 
-     if(num<100){lista[num++]=obj;return true;} 
-     else return false; 
-     } 
-   void Itera(); 
-   void Pinta(); 
-   int GetNum(){return num;} 
-   
- }; 
-   
- class ObjetoCeleste 
- { 
- protected: 
-   double posicion[3]; 
-   double velocidad[3]; 
-   int tipo; 
- public: 
-   
-   ObjetoCeleste(double x, double y, double z,double vx,double vy,double vz) 
-     { 
-     posicion[0]=x;posicion[1]=y;posicion[2]=z; 
-     velocidad[0]=vx;velocidad[1]=vy;velocidad[2]=vz; 
-     } 
-   virtual void Pintar(){} 
-   virtual void Itera(ListaObjetos &lista) 
-     { 
-     for(int i=0;i<3;i++)posicion[i]+=velocidad[i]; 
-     } 
-   double operator -(ObjetoCeleste &obj) 
-     { 
-     double dist=0; 
-     for(int i=0;i<3;i++) 
-       dist+=((posicion[i]-obj.posicion[i])*(posicion[i]-obj.posicion[i])); 
-     return sqrt(dist); 
-     } 
-   void PrePintado() 
-     { 
-     glPushMatrix(); 
-     glTranslated(posicion[0],posicion[1],posicion[2]); 
-     } 
-   void PostPintado(){glPopMatrix();} 
- }; 
-   
-   
- class Planeta:public ObjetoCeleste 
- { 
- protected: 
-   double Masa; 
-   double Radio; 
-   float Color[3]; 
- public: 
-   Planeta(double rad,double mas,  
-     double x, double vx, double y=0,double vy=0,double z=0,double vz=0) 
-     :ObjetoCeleste(x,y,z,vx,vy,vz),Masa(mas),Radio(rad){}   
-   void SetColor(float r,float g,float b){Color[0]=r;Color[1]=g;Color[2]=b;} 
-   void Pintar(); 
-   void Itera(ListaObjetos &lista); 
- }; 
-   
-