#include "cog.h" class Cog::Impl { private: float m_radius; float m_circumference; int m_numteeth; public: Impl(); bool IsValid() const; float radius() const; bool radius(float); }; Cog::Impl::Impl() { m_radius = Cog::InvalidRadius; } bool Cog::Impl::IsValid() const { // // need lots more checks here... // return true; } float Cog::Impl::radius() const { if (!IsValid()) return Cog::InvalidRadius; return m_radius; } bool Cog::Impl::radius(float radius) { if (!IsValid()) return false; // should validate radius arg here... m_radius = radius; return true; } Cog::Cog() { impl = new Impl; } Cog::~Cog() { if (impl) { delete impl; impl = 0; } } float Cog::radius() const { if (impl) return impl->radius(); else return InvalidRadius; } bool Cog::radius(float radius) { if (impl) return impl->radius(radius); else return false; }