したがって、次のヘッダーファイルを持つ基本クラスがあります。
#ifndef ODESolver_H
#define ODESolver_H
#endif
#include "DoublePendulum.h"
class ODESolver
{
public:
ODESolver(DoublePendulum &);
virtual void Predict(const double &)=0;
DoublePendulum DP;
};
実装:
#include "ODESolver.h"
#include <iomanip>
ODESolver::ODESolver(DoublePendulum &DPRef) :DP(DPRef)
{}
そしてそれを継承するクラス:
#ifndef ODEEuler_H
#define ODEEuler_H
#endif
#include "ODESolver.h"
class ODEEuler : public ODESolver
{
public:
ODEEuler(DoublePendulum &);
void Predict(const double &);
};
実装:
#include "ODEEuler.h"
ODEEuler::ODEEuler (DoublePendulum &DPRef) :ODESolver(DPRef)
{}
void ODEEuler::Predict(const double &dt=0.005)
{
DP=DP+DP.Derivate()*dt;
cout << DP.getUp().getTheta() << endl;
}
問題は、上記の実装でDP=DP+DP.Derivate()*dt;
は何もしないということです。これがどのように可能であるか私にはわかりません。メンバー関数が機能するかどうかを確認.Derivate()
しましたが、実際には正しい値/オブジェクトが返されます。その上、私がそこで何をするかは問題ではありません。たとえばDP=DoublePendulum RandomObject(1,2,3,4)
、DPを同じに保つことができます。何か案は?私は十分な情報を提供したと思います...
また、DoublePendulumなどの実装と宣言: