按价值传递此值

时间:2011-05-26 13:46:59

标签: c++ this

愚蠢的问题:按价值传递此信息的最佳方式是什么?

背景:让我们使用汽车和汽车选择。我曾经有过福特(FordOptions),本田(HondaOptions)等建筑商。所有汽车都来自Car,CarOptions的所有选项。我曾经有一个汽车工厂,它传递一个指向CarOption的指针,检查类型,生成适当的汽车,并返回指向通用汽车的指针。

我现在已经改变了这一点,以便CarOption有一个虚拟的ProduceCar返回Car,并且每个单独的汽车选项都实现了它的特定生产。因此,当我获得一个指向汽车选项的通用指针时,我只需调用CarOptions.ProduceCar并获取一个指向汽车的通用指针。

这一切都很好,除了在说明FordOption.ProduceCar的实现中我需要将FordOption实例传递给Ford构造函数。我可以通过传递“this”并改变Ford的构造来接受指向FordOptions而不是FordOptions的指针。但是,我希望它能够通过价值,或者至少通过参考来获取FordOptions,但是很难这样做。

我打赌一个简单的答案的长问题。感谢。

5 个答案:

答案 0 :(得分:4)

您只需取消引用this指针...并根据被调用的方法,传递引用(如示例中所示)或按值

Ford::Ford(const FordOption &o) {}

Ford FordOption::produceCar() {
   return Ford(*this); // <-- Dereference this
}

答案 1 :(得分:1)

this是一个常规的旧指针。因此*this会生成对象this指向的引用,然后可以随意传递。

答案 2 :(得分:1)

如果您想要做的只是按价值或参考路径this,只需使用*this

return new Ford(*this);

答案 3 :(得分:1)

我相信你想要取消引用'this'指针。为此,请将*发送给您的同事。

答案 4 :(得分:0)

所以你有一个CarOption&amp;您认为其实是FordOption&amp; ?听起来像是dynamic_cast运营商的工作。