クラスを作成する目的の 1 つは、すべての非相対データと操作を異なるクラスに分離することです。
あなたの場合、一部は計算であり、他の部分は結果のレイアウトです。
したがって、それを実装する最善の方法は、すべての計算と結果へのアクセスを提供するクラスを定義し、計算クラスのオブジェクトを使用する描画関数を実装することです。
したがって、コードを変更することなく、他の環境 (たとえば、他のプロジェクト) で計算を使用できるようになります。これは当然のことです。プラットフォームに依存しない計算コードの移植性を提供します。
また、プラットフォームに依存するレイアウト部分は、計算クラスが提供するインターフェースのみを使用して、個別に実装する必要があります。
class Trajectory
{
public:
// Constructor, computation call methods
// "GetResult()" function,
// which will return trajectory in the way you choose
...
private:
// computation functions
};
// somewhere else
void DrawTrajectory(Trajectory t)
{
// here is a place for calling all winapi functions
// with data you get using t.GetResult()
}
抽象クラスが必要な場合は、Trajectory クラスを抽象クラスから継承する必要があります。ここで、呼び出す必要があるすべての関数を定義します。
この場合
//
class ITrajectory
{
public:
// virtual /type/ GetResult() = 0;
// virtual /other methods/
};
class Trajectory : public ITrajectory
{
// the same as in previous definition
};
void DrawTrajectory(ITrajectory T)
{
// the same as in previous definition
}