#include using namespace std; class Data { public: double m_Opposite; double m_Adjacent; double m_Hypotenuse; }; class ITrigo // pure virtual class { public: virtual void CompAngle(Data input, double& angle1, double& angle2) = 0; }; class SinCsc : public ITrigo // worker class, realizing ITrigo { public: void CompAngle(Data input, double& angle1, double& angle2) { angle1 = input.m_Opposite / input.m_Hypotenuse; angle2 = input.m_Hypotenuse / input.m_Opposite; } }; class Trigo { private: Data m_Input; ITrigo* m_pObject; public: void SetAttributes (Data input) { m_Input = input; } void SetTrigoObject (ITrigo* pObject) { m_pObject = pObject; } void Compute (double& angle1, double& angle2) { m_pObject->CompAngle(m_Input, angle1, angle2); } }; int main(){ Data d; Trigo t; d.m_Opposite = 4.0; d.m_Adjacent = 3.0, d.m_Hypotenuse = 5.0; t.SetAttributes(d); ITrigo *pObj = new SinCsc(); t.SetTrigoObject(pObj); double sine, cosecant; t.Compute(sine, cosecant); cout << "Sine: " << sine << endl; cout << "Cosecant: " << cosecant << endl; delete pObj; return 0; }