如何计算c ++中两个数字的差异?

时间:2012-11-03 12:08:26

标签: c++

如果我只启用double和integer,那么它是4个函数。但我想启用所有数据类型(int long float double unsigned numbers等)。它怎么可能?

#include <iostream>

using namespace std;

double diff(int num1, int num2) {
    return double(num1-num2);
}

double diff(int num1, double num2) {
    return double(num1)-num2;
}

double diff(double num1, int num2) {
    return num1-double(num2);
}

double diff(double num1, double num2) {
    return num1-num2;
}

int main() {
    int a = 10;
    double b = 4.4;
    cout << diff(a, b) << endl;
    return 0;
}

6 个答案:

答案 0 :(得分:9)

template <typename T, typename U>
double diff(T a, U b) {
    return a - b;
}

您不需要转换为double - 如果任一参数为double,则会为您完成此操作;如果两者都是整数,则在return期间为您完成。然而,

double diff(double a, double b);
也可以使用int参数调用

答案 1 :(得分:8)

使用模板功能:

template <typename T1, typename T2>
double diff(const T1& lhs, const T2& rhs)
{
  return lhs - rhs;
}

答案 2 :(得分:4)

您不必“启用”操作,只需写下:

cout << (a - b) << endl;

答案 3 :(得分:3)

与之前的所有答案不同,我将添加有关C ++ 11的内容。在C ++ 11中,您可以使用decltype

#include <iostream>

template <typename T1, typename T2>
auto diff(T1 a, T2 b) -> decltype(a)
{
   return (a - b);
}

int main() {
   std::cout << diff(3.5, 1) << std::endl;
   std::cout << diff(3, 1.5) << std::endl;
}

diff函数将始终返回类型的值,如第一个参数。注意在第一种情况下它是浮点数,但在第二种情况下它是整数。

答案 4 :(得分:1)

您可以为同一个

定义模板
template <typename T, typename U>
T diff(const T& a, const U& b) {
    return a - b;
}

这段代码做了很多假设,比如运算符 - 是为T定义的,返回类型总是T类型等等......

答案 5 :(得分:1)

您总是可以使用绝对值来计算差异,例如

cout << abs(a - b) << endl;

你可能想要使用像之前的答案那样的模板。