问题描述
|
愚蠢的问题:通过价值传递最佳方法是什么?
背景:让我们使用汽车和汽车选择。我曾经有诸如Ford(FordOptions),Honda(HondaOptions)之类的构造函数。所有汽车均来自Car,所有选项均来自CarOptions。我曾经有一个汽车工厂,该工厂被传递一个指向CarOption的指针,检查类型,产生合适的汽车,并返回一个指向通用Car的指针。
现在,我已对此进行了更改,以便CarOption具有一个虚拟的ProduceCar来返回Car,并且每个单独的car选项都实现其特定的生产。因此,当我获得指向汽车选项的通用指针时,只需调用CarOptions.ProduceCar并获得指向汽车的通用指针即可。
一切都很好,除了在实现FordOption.ProduceCar之外,我需要将FordOption实例传递给Ford构造函数。我可以通过传递\“ this \”并更改Ford的构造函数来接受指向FordOptions而不是FordOptions的指针来实现。但是,我希望按值或至少通过引用采用FordOptions,但这样做却很困难。
我敢打赌,答案很长。谢谢。
解决方法
您只需要解除对
this
指针的引用即可...根据所调用的方法,您可以传递一个引用(如示例中所示)或按值
Ford::Ford(const FordOption &o) {}
Ford FordOption::produceCar() {
return Ford(*this); // <-- Dereference this
}
,this
是常规旧指针。因此,*this
会生成对对象this
指向的引用,然后可以根据需要传递该引用。
,如果您要做的只是按值或引用来指向ѭ0path,只需使用*this
:
return new Ford(*this);
,我相信您想取消引用\'this \'指针。为此,请将* this发送给您的监督者。
,所以您有一个CarOption&,您认为它实际上是FordOption&?对于dynamic_cast
运算符来说,这听起来像是一项工作。