继承类的成员函数不会更改继承的基类变量

Member function of inherited class won't change inherited base class variable

本文关键字:继承 类变量 基类 成员 函数      更新时间:2023-10-16

所以我有一个带有以下头文件的基类:

#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不变。有什么想法吗?我希望我提供了足够的信息...

还有双摆等的实施和声明:

http://pastebin.com/ny3pU8aR

此赋值运算符

DoublePendulum DoublePendulum::operator= (DoublePendulum &DoublePendulumA)
{
        return DoublePendulum (DoublePendulumA);
}

创建一个新值,但不会真正将 anyting 分配给赋值的左侧。这就是为什么它不会改变!

标准作业形式如下所示

DoublePendulum& DoublePendulum::operator= (const DoublePendulum& DoublePendulumA)
{
    // assign to members of this object
    return *this;
}