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

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

本文关键字:选择 函数 多态 行选 同类型 之间      更新时间:2023-10-16

数字和字符串都可以用<<传递到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:UsersszevaDesktopBasic programmingBasic programmingSource.cpp   2316    

该函数___0607sqrt运行良好(我已经检查过了(并返回一个 int,但以防万一,这是它的代码:

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声明。