传递C ++的不同类对象

时间:2015-02-12 10:01:55

标签: c++ class

我有一些预定义的课程

class x
{
   int y;
} xx;
class z
{
  int y;
} zebra;

我希望将xxzebra传递给函数,具体取决于几个条件

function(x xx) or function(z zebra)

由于"function"的功能对于上述两者都相同,我如何编写一个可以同时使用xxzebra的函数。我不被允许重新定义或宣布课程

2 个答案:

答案 0 :(得分:3)

如果你需要像

这样的东西
void add3(x xx)
{
    xx.y += 3;
}

可用于课程z,最好使用模板功能:

template<typename T>
void add3(T value)
{
    value.y += 3;
}

另一个选择就是使用重载并定义两个函数:

void add3(x xx)
{
    xx.y += 3;
}

void add3(z zebra)
{
    zebra.y += 3;
}

如果两个类xz在抽象方面有所不同,那么重载可能更好。

如果它们的抽象相同,它们应该基于共享接口(例如basey字段,xz都应该继承{{ 1}}然后你只有base)。您可以在void add3(base b)http://www.cplusplus.com/reference/ios/)中看到此示例,其中输入和输出(std::iosstd::istream)都是流,但它们提供的功能完全不同实际使用情况。

另一方面,许多STL容器没有这种接口模式,因此模板解决方案并不总是坏主意。这只是你的风格和你正在使用的资源的问题。

答案 1 :(得分:2)

这取决于您在function内需要做什么。

如果可以使用x内的相同代码处理zfunction,请将function设为模板函数。

否则为function制作两个重载,一个采用x,另一个采用z