2011-05-26 135 views
2

愚蠢的问题:通过价值传递这个最好的方法是什么?通过值传递

背景:让我们用汽车和汽车选项。我曾经有福特(FordOptions),本田(HondaOptions)等构造商。所有汽车都来自Car,CarOptions的所有选项。我曾经有一家汽车工厂通过一个指向CarOption的指针,检查类型,生成相应的汽车,并返回一个指向通用汽车的指针。

现在我已经改变了这一点,以便CarOption具有虚拟ProduceCar返回车上,每个人车选项实现其特定的生产。所以当我得到一个通用的指向汽车选项的指针时,我只需调用CarOptions.ProduceCar并获得一个通用汽车指针。

这是所有正常,除了在说执行FordOption.ProduceCar我需要的FordOption实例传递给福特的构造函数。我可以通过传递“this”并更改Ford的构造函数来接受指向FordOptions而不是FordOptions的指针。不过,我希望它能够通过价值或至少参照来考虑FordOptions,但是很难这样做。一个简单的答案,我敢打赌,

长的问题。谢谢。

+3

而不是试图描述你的代码,你可以发布一个简单的例子吗? – 2011-05-26 13:48:49

+0

新的编辑使答案看起来不正确。 OP想知道如何传递当前对象(由'this'指向),而不是如何传递'this'指针。 – 2011-05-26 14:15:22

+0

这不是一个愚蠢的问题,它只是一个初学者的问题。这没什么错。 – 2011-05-26 14:25:01

回答

4

你只需要取消引用指针this ...并根据调用的方法,你传递一个引用(如上例),或价值

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

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

所以,你有一个CarOption &其你相信事实上是一个福特选项&?听起来像是dynamic_cast运营商的工作。

1

this是一个普通的旧的指针。所以*this产生一个对象this指向的引用,然后可以通过,但是你喜欢。

1

如果你想要做的是通过值或引用路径this,只需使用*this

return new Ford(*this); 
1

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