【发布时间】:2013-09-13 13:43:38
【问题描述】:
在 c++ 中,将派生类传递给函数/方法,代替基类,并且仍然拥有派生类的信息? 例如:假设我有一个基类:“几何”和其他一些类:“形状”形式,我派生出“矩形”和“圆形”。
double area::geometry( shape& object, int i )
{
if i = 1:
rectangle thisObject = object;
double side1 = thisObject.getheight();
double side2 = thisObject.getwidth();
if i = 2:
circle thisObject = object;
double side1 = thisObject.radius * thisObject.radius;
double side2 = 3.14;
return side1 * side2;
}
问题是你必须假设“return side1 * side2”是一个非常复杂的代码,我不想重复。所以我更喜欢根据函数的输入类型来设置问题,而不是重载它。
这个想法与这个非常相似:Is it possible to pass derived classes by reference to a function taking base class as a parameter。 谢谢!
编辑:试图使代码更清晰。
【问题讨论】:
-
我感觉 XZ 有问题...
-
@KerrekSB:XZ 问题是不是你有一个问题 Z,你认为解决方案是 Y,所以你问如何做与 Y 无关的 X? ;)
-
希望问题很清楚:我不想重载函数,因为代码实际上是相同的。我给出了一个部分解决方案,因为我虽然可以这样解决,这就是为什么它可能是 XZ 问题。谢谢你的回答!
标签: c++ overloading