// A basic use of pointer to a class
#include <iostream>
#include <cmath>
using namespace std;

class Planet{
  public:
    Planet(double, double);
    double Density();
    double Gravity();
  private:
    double M, R, G;
};

int main(){
   Planet *pMars = new Planet(6.4e23, 3.4e6);

   cout << "Mars Density = " << pMars->Density() << endl;
   cout << "Mars Gravity = " << pMars->Gravity() << endl;

   cout << "Mars Density = " << (*pMars).Density() << endl;
   cout << "Mars Gravity = " << (*pMars).Gravity() << endl;
}

// Constructor function to set the mass and radius of the planet
Planet::Planet(double mass, double radius){
  M = mass;
  R = radius;
  G = 6.67428e-11;
}
// Mass density in g/cm3
double Planet::Density(){
  double d = M/(4.0*M_PI*R*R*R/3);
  return d * 1.0e-3;
}
// Surface gravity in m/s2
double Planet::Gravity(){
  double g = G*M/(R*R);
  return g;
}
