在 C++ 中从类外部修改类的成员
Modifying the member of a class from outside the class in C++
我想知道以下过程是否真的在做我想要它做的事情,并说服自己不同的方法。
我有一个名为 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 限定符时存在被意外修改的风险。希望这能回答你的问题。
相关文章:
- 如何从子成员函数修改父公共成员变量
- 修改C++结构的特征成员时出现问题
- 如何修改增强 hana 结构的成员
- 在 C++ 中从类外部修改类的成员
- 结构对象的指针成员在传递给函数时被修改
- 如何使用gmock模拟修改C++类中私有变量的成员函数
- C++:成员不可访问-使用友元函数允许一个类修改另一个类的成员数据
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- C++11-在结构向量中修改结构的成员
- 使用 QtConcurrent::run() 修改成员变量?
- 通过运算符使用标量参数重写来修改类成员
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 我允许用memcpy(*this)修改构造函数中的所有类成员
- 修改类 c++ 中的成员对象
- 修改成员初始值设定项列表
- 在模板容器的const函数中修改成员变量时发生编译错误
- 使用指针从一个c++对象,到另一个c++对象,修改成员变量,从Lua
- 返回指向不可修改成员数组的指针