如何在不同类型的值之间进行选择以传递给多态函数?

How do I choose between values of different types to pass to a polymorphic function?

数字和字符串都可以通过<<传递给cout。当它们具有不同的类型时,如何使用三元运算符将这两个值中的任何一个传递给它?

例如,这是合法的:

if(___0607sqrt(a) != 0) {
    cout << "sqrt(" << a << ") = " << ___0607sqrt(a);
} else {
    cout << "sqrt(" << a << ") = " << "?");
}

但这不是:

cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?");

当我尝试时,我得到这个错误:

Error (active)  E0042   operand types are incompatible ("int" and "const char *")   Basic programming   C:\Users\szeva\Desktop\Basic programming\Basic programming\Source.cpp   2316    

函数 ___0607sqrt 运行良好(我已经检查过了)并且 returns 是一个整数,但为了以防万一,这里是它的代码:

int ___0607sqrt(int n)
{
    for (int i = 1, j = 1; i < n; i++)
    {
        n -= j;
        j += 2;
        if (n == j)return i + 1;
    }
    return 0;
}

我读到 << 的优先级高于 '?'和 ':',所以我将其放在括号内,但这并没有帮助。

我怎样才能输出两种不同类型中的一种而不需要将 if 语句与两个不同的 cout 语句一起使用?

这个表达式的类型是什么?

((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?")

int 还是 char* ?编译器也不知道。

编译器需要 : 左侧的表达式与三元中 : 右侧的表达式具有相同类型或可转换。

更好:

cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? std::to_string(___0607sqrt(a)) : "?");

您可能需要 #include <string> 进行 std::to_string 声明。