所以我有一个带有以下头文件的基类:
#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等的实现和声明:
答案 0 :(得分:3)
此赋值运算符
DoublePendulum DoublePendulum::operator= (DoublePendulum &DoublePendulumA)
{
return DoublePendulum (DoublePendulumA);
}
创建一个新值,但并不真正将任何内容分配给赋值的左侧。这就是为什么它不会改变!
标准的作业形式如下
DoublePendulum& DoublePendulum::operator= (const DoublePendulum& DoublePendulumA)
{
// assign to members of this object
return *this;
}