#include <iostream>
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;
}
Comments