在 C++ 中从类外部修改类的成员

Modifying the member of a class from outside the class in C++

本文关键字:修改 成员 外部 C++      更新时间:2023-10-16

我想知道以下过程是否真的在做我想要它做的事情,并说服自己不同的方法。

我有一个名为 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 Class 的对象作为成员。在其中,我有如下所示的函数:

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 类对象的成员(我们想要做什么(,要么获得你修改的 valueFunction 的副本,然后在它超出范围时丢失(我们不想要(,这是正确的吗?所以我应该这样写吗:

Wrapper<valuationFunction> SimulationEngine::GetFunction()
{
return theFunction;
}

或者这是正确的方法:

Wrapper<valuationFunction> SimulationEngine::GetFunction()
{
return *theFunction;
}

我想说第二种方法是正确的,但是当涉及到这些东西时,我从来没有真正确定自己,并且希望能够说服自己这里的区别。

我认为您要做的是通过引用返回,如下所示:

const Wrapper<valuationFunction> & SimulationEngine::GetFunction() const
{
return theFunction;
}

请注意,使用 const(两次(可避免无意中修改成员。通过引用返回可避免副本,但在返回时没有 const 限定符时存在被意外修改的风险。希望这能回答你的问题。