【发布时间】:2020-09-04 19:35:49
【问题描述】:
我想知道下面的过程是否真的在做我打算做的事情,并让自己相信不同的做事方式。
我有一个名为 SimulationEngine 的基类,它有一个类型为 ValuationFunction 的对象作为成员,如下所示:
class SimulationEngine
{
public:
SimulationEngine(double horizon, Wrapper<valuationFunction>& theFunction_);
virtual void DoOnePath(double vol, double normvariate) = 0;
virtual SimulationEngine* clone() const = 0;
virtual double GetHorizon();
virtual Wrapper<valuationFunction> GetFunction();
protected:
double horizon;
Wrapper<valuationFunction> theFunction;
};
然后我有一个名为 MCEngine 的第三个类,它有一个 SimulationEngine 类类型的对象作为成员。其中我的函数如下所示:
void MCEngine::ValuePortfolio()
{
V = 0;
for (unsigned long i = 0; i < EngineVector.size(); ++i)
{
double placholder = 3;
EngineVector[i]->GetFunction()->valueInstrument(placholder);
V += EngineVector[i]->GetFunction()->getValue();
}
return;
}
GetFunction() 在获取函数对象时
valueInstrument(placholder)
会修改一个类的成员和
getValue()
将检索刚刚修改的值。现在我的问题本质上是我的 GetFunction() 函数应该是什么样子?我认为根据您的操作方式,您将在适当的位置修改 ValuationFunction 类对象的成员(我们想要做的),或者获取您修改的值的副本,然后在超出范围时丢失(我们不想),对吗?所以我应该这样写:
Wrapper<valuationFunction> SimulationEngine::GetFunction()
{
return theFunction;
}
或者这是正确的做法:
Wrapper<valuationFunction> SimulationEngine::GetFunction()
{
return *theFunction;
}
我想说第二种方法是正确的,但在涉及到这些东西时我从来没有真正确定过自己,并且希望能够说服自己相信这里的不同之处。
【问题讨论】: