C++ 与C+中的重写混淆+;
所以我在一次采访中遇到了这个问题,对重载规则感到非常困惑,你能在编译时给我指一下解释吗 重载函数:C++ 与C+中的重写混淆+;,c++,overloading,C++,Overloading,所以我在一次采访中遇到了这个问题,对重载规则感到非常困惑,你能在编译时给我指一下解释吗 重载函数: int mult(int a, int b) { cout<<"int "; return a*b; } long mult(long a, long b) { cout<<"long "; return a*b; } float mult(float a, float b) { cout<<"float "; return a*b;
int mult(int a, int b)
{
cout<<"int "; return a*b;
}
long mult(long a, long b)
{
cout<<"long "; return a*b;
}
float mult(float a, float b)
{
cout<<"float "; return a*b;
}
intmult(inta,intb)
{
你能很好地描述一下你的工作吗
这里发生的事情是,mult是基于最少的转换量选择的
long m = mult(5.2,7);
long m
是完全不相关的。此调用是mult(double,int)
因此,现在要找到最适合此函数的函数,规则说查找应用了最少转换量的函数(请参阅最佳可行函数)
这相当于mult(int,int)
只需要一个转换。所有其他函数都需要两个隐式转换来匹配
对于第二个调用,同样的参数也是正确的
例如,这些规则很容易使调用变得模棱两可
如果你加上
float mult(int a, float b);
在混合中,您的程序无法编译。调用
float f = mult(5, 7.2);
也是一个隐式转换,与mult(int,int)
函数相同,因此不明确。它似乎是重载的,而不是重写的。函数由函数签名唯一确定。参数类型是函数签名的一部分,以及函数名和某些关键字(例如const)。请注意,返回类型不是签名的一部分,因为运行时类型转换。对,它是重载的,我总是混合使用这两个术语…@Will Gu,那么在我的情况下,选择一个或另一个函数签名的规则是什么?我想说函数是由输入类型选择的,因此是第三个。但这是错误的。我意识到有些东西有趣的是:关于double vs float的有趣事实……但在我的例子中,它甚至更难,因为我们有一个没有小数的数字(可以是整数或长的)和一个带小数的数字(在我们的例子中是double)…所以这里调用的函数似乎是同时具有int参数的函数…我仍然找不到该规则的正确定义。
float f = mult(5, 7.2);