C++ 如何使用3个重载函数(参数的差异是int、long、float)编写一个程序,同时只要求输入一个条目?
我必须写一个程序,输入两个数字,然后程序计算平均值。我想写我的程序,如果我输入两个十进制数,程序将调用float函数,如果我输入两个整数,它将调用integer函数,输入两个长数,它将调用long函数 我遇到的主要问题是选择变量类型。因为如果我对变量使用long类型,但是用户输入的两个数字是十进制的,那么程序调用long函数,平均值作为long变量输出 以下是我到目前为止得到的信息:C++ 如何使用3个重载函数(参数的差异是int、long、float)编写一个程序,同时只要求输入一个条目?,c++,overloading,C++,Overloading,我必须写一个程序,输入两个数字,然后程序计算平均值。我想写我的程序,如果我输入两个十进制数,程序将调用float函数,如果我输入两个整数,它将调用integer函数,输入两个长数,它将调用long函数 我遇到的主要问题是选择变量类型。因为如果我对变量使用long类型,但是用户输入的两个数字是十进制的,那么程序调用long函数,平均值作为long变量输出 以下是我到目前为止得到的信息: #include <iostream> int average(int, int); long a
#include <iostream>
int average(int, int);
long average(long, long);
float average(float, float);
int main()
{
//The variables
// The problem with them is that if I use
// a type, let's say int, but the input
// is a float, then it won't work
x;
y;
averag;
std::cout << "Here is a number: ";
std::cin >> x;
std::cout << "\nHere is another one: ";
std::cin >> y;
//The function in call
averag = average(x, y);
std::cout << "\n\nHere is the average: ";
std::cout << averag;
return 0;
}
//The definition of the int function
int average(int x, int y)
{
int x;
int y;
int average;
average = (x + y) / 2;
return average;
}
// The definition of the short function
short average(short x, short y)
{
short x;
short y;
short average;
average = (x + y) / 2;
return average;
}
// The definition of the float function
float average(float x, float y)
{
float x;
float y;
float average;
average = (x + y) / 2;
return average;
}
//I think i'm not grasping the scopes in which I can define a variable
//and where I must define the parameters within the functions
#包括
int平均值(int,int);
长平均(长,长);
浮动平均值(浮动,浮动);
int main()
{
//变量
//问题是如果我使用
//一个类型,比如int,但是输入
//如果是一个浮点数,那么它就不起作用了
x;
Y
平均值;
std::cout>x;
std::cout>y;
//调用中的函数
averag=平均值(x,y);
std::cout我会让用户先输入类型(例如“输入F表示浮点,输入I表示整数…”等)然后使用该输入作为条件,将输入读入适当类型的变量,并调用重载的average
函数。是的,在函数范围中定义变量的方式是错误的。您的参数定义变量,在函数中定义变量只会再次定义它们。我不是mos不熟悉C++,但我认为它会“阴影”参数变量,并且你的计算将不起作用。
对于主要问题,我同意sje397的回答,让用户输入他们希望首先执行的平均值类型。如果用户输入5和4,则双平均值将不同于长平均值。我将以字符串形式输入值,然后使用连续调用推断类型:
std::string x,y;
std::cin >> x >> y;
try {
short averag = average(boost::lexical_cast<short>(x), boost::lexical_cast<short>(y));
std::cout << averag << "\n";
return;
} catch(boost::bad_lexical_cast&) {}
try {
int averag = average(boost::lexical_cast<int>(x), boost::lexical_cast<int>(y));
std::cout << averag << "\n";
return;
} catch(boost::bad_lexical_cast&) {}
try {
float averag = average(boost::lexical_cast<float>(x), boost::lexical_cast<float>(y));
std::cout << averag << "\n";
return;
} catch(boost::bad_lexical_cast&) {}
std::cout << "Oops\n";
std::字符串x,y;
标准:cin>>x>>y;
试一试{
short averag=average(boost::lexical_cast(x),boost::lexical_cast(y));
std::cout您可以询问用户希望执行哪种计算。
缺点:
暴露了用户不感兴趣的程序内部(用户希望计算两个数字的平均值)
您不能信任该用户。如果您的程序运行良好且未崩溃(例如,如果用户在选择整数计算后键入十进制数),则可能会产生错误的结果
我每次读取输入,看看这个值是一个十进制数,一个短整数(小于9位数)还是一个长整数。然后你必须考虑一些情况(例如一个输入是十进制,另一个是长整数)。并执行计算。它的级别相当低,但无论如何我都会将其重构为函数。您似乎对重载函数何时得到解决感到困惑。编译器会在编译程序时(而不是在运行时)确定要调用哪个函数。