gpt4 book ai didi

c++重载具有不同参数的3个函数(int,* int,& int)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:12 26 4
gpt4 key购买 nike

所以我有这个作业要做“使用函数重载定义 3 个具有相同名称但具有不同 prams 类型(int、int*、int&)的函数,它们将返回值的平方根。”好吧,我做到了,但我不知道它给了我这个错误:“对重载函数的模糊调用”。我尝试修复它但没有成功......这是我的代码,它非常简单:

#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <iostream>
using namespace std;

double rad(int);
double rad(int*);
double rad(int&);

int main(){
int a,*pt=&a;
cin>>a;
cout<<"Radical din "<<a<<" este "<<rad(a)<<endl;
cout<<"Radical din "<<a<<" este "<<rad(pt)<<endl;
cout<<"Radical din "<<a<<" este "<<rad(&a)<<endl;
return 0;
}

double rad(int x){
return (sqrt(x));
}
double rad(int *x){
return (sqrt(*x));
}
double rad(int &x){
return (sqrt(x));
}

最佳答案

鉴于这些声明:

double rad(int);   // (1)
double rad(int*); // (2)
double rad(int&); // (3)

处理 (2) 很简单。我们要么有指针,要么没有,不可能混淆。那么问题是,发生了什么:

int a;
rad(a);

好吧,这里 (1)(3) 都有效。实际上,在确定最佳可行候选人的规则中,两者之间没有任何偏好!这是一个不明确的调用,所以它总是无法编译。


请注意,虽然 可以显式调用 (1) - 只需传入一个 int 就可以了引用:

rad(4); // calls (1), since neither (2) nor (3) are possible

另请注意,即使使用像 a 这样的命名变量,也可以调用 (1)(3),但我们可以' 依靠重载决议来做到这一点。我们必须明确地告诉编译器我们想要哪个函数。为此,我们必须输入名称:

int a;
static_cast<double(*)(int)>(rad)(a); // calls (1) explicitly
static_cast<double(*)(int&)>(rad)(a); // calls (3) explicitly

关于c++重载具有不同参数的3个函数(int,* int,& int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com