【问题标题】:Member function of inherited class won't change inherited base class variable继承类的成员函数不会改变继承的基类变量
【发布时间】:2012-05-16 09:09:34
【问题描述】:

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

#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

【问题讨论】:

  • 是否定义了 DP 和 (DP.Derivate()*dt) 之间的 operator+ 来做你期望做的事情?
  • DP 和 DP.Derivate 都是 DoublePendulum 类的对象,为此我重载了 + 运算符。我已经检查了这个以添加随机对象。最重要的是,我在那行写了以下内容:DoublePendulum Result=DP+DP.Derivate()*dt 给出了正确的值。
  • 能不能添加DoublePendulum的声明.. 想看看里面定义了哪些操作符。
  • 在不相关的注释中:您的#include 保护错误:#endif 必须位于文件末尾。像现在这样,它一无所获。

标签: c++ class inheritance public


【解决方案1】:

这个赋值运算符

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

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

赋值的标准形式是这样的

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

    return *this;
}

【讨论】:

  • 您,先生,是人中的神。你刚刚为我节省了几天的工作。我以为我在 C++ 中找到了实现复制赋值运算符的“捷径”,显然我没有……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2016-12-03
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多