GRAVITYBALL.H
Our new class, gravityBall, can add acceleration member variables and override the member function fall.
#include "ball.h"
class gravityBall :public ball
	{
	public:
	gravityBall(void);
	~gravityBall(void);
	void fall(void);
	void setAcceleration(float, float, float);
inline	float getXAcceleration(void) { return xAcceleration; }
inline	float getYAcceleration(void) { return yAcceleration; }
inline	float getZAcceleration(void) { return zAcceleration; }
	protected:
	float xAcceration;
	float yAcceration;
	float zAcceration;
	};
GRAVITYBALL.CXX
With the inclusion of acceleration, we can give our ball a realistic trajectory.
include "gravityBall.h"
gravityBall::gravityBall(void)
	{
	setAcceleration(0.0,0.0,-9.8);
	}
gravityBall::~gravityBall(void)
	{
	}
void gravityBall::fall(void)
	{
	xPosition += xVelocity;
	yPosition += yVelocity;
	zPosition += zVelocity;
	xVelocity += xAcceleration;
	yVelocity += yAcceleration;
	zVelocity += zAcceleration;
	if (zVelocity < 0.0 && zPosition <= 0.0)
		resetVelocity();
	}
void gravityBall::setAcceleration(float xValue, float yValue, float zValue)
	{
	xAcceleration = xValue;
	yAcceleration = yValue;
	zAcceleration = zValue;
	}