gpt4 book ai didi

c++ - 继承类的成员函数不会改变继承的基类变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:52 24 4
gpt4 key购买 nike

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

#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等的实现和声明:

http://pastebin.com/ny3pU8aR

最佳答案

这个赋值运算符

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

创建一个新值,但并不真正将任何值分配给赋值的左侧。这就是它没有改变的原因!

标准的赋值形式是这样的

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

    return *this;
}

关于c++ - 继承类的成员函数不会改变继承的基类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com