int area(int &r) //求圆面积
int area(int h = 5,int a = 6) //求三角形面积
可是我在main里无论怎么调用,求圆面积的函数怎么是不能被调用,请问怎么才能准确的调用这两个函数呢?
10 个解决方案
#1
呵呵,你最好贴出代码来大家好帮你看看,你
目前所给的信息是不是少了点?
目前所给的信息是不是少了点?
#2
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
}
三次调用全都调用的第二个函数,怎么才能调用第一个呢?
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
}
三次调用全都调用的第二个函数,怎么才能调用第一个呢?
#3
因为你是用引用(int &r)做参数,而一个文字量(就是6呀,3呀,2呀那些)是不能作为引用的。另一方面,计算三角形面积那个函数的参数是按值传递的,可以接受文字量,所以所有的调用都被指向它。解决办法有两个:
1.修改圆面积计算函数的参数
int area( int r )// 不要提供缺省值,否则调用area()时编译器就不知道你是要调用哪一个了
或者:
int area( const int& r )// 文字量量可以作为常量引用
2.修改调用方式:
int r = 6;
cout << area( r );
不过有一点不明白,为什么你要用引用作为参数?难道要在函数内修改它?
1.修改圆面积计算函数的参数
int area( int r )// 不要提供缺省值,否则调用area()时编译器就不知道你是要调用哪一个了
或者:
int area( const int& r )// 文字量量可以作为常量引用
2.修改调用方式:
int r = 6;
cout << area( r );
不过有一点不明白,为什么你要用引用作为参数?难道要在函数内修改它?
#4
我来回答你的问题吧!希望对你有帮助!
首先计算圆面积的函数定义有问题,问题在参数不应该声明为int &r,而应该生民为const int &r。因为这和你在主函数main中的调用area(6)有关。6是常数,它只能传给常量引用(const int &r),而不能传给非常量引用(int &r)。你可以通过下面的程序来验证。
程序1:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通不过编译!
程序2:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通过了编译!
程序3:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
system("pause");
return 0;
}
通过了编译!
首先计算圆面积的函数定义有问题,问题在参数不应该声明为int &r,而应该生民为const int &r。因为这和你在主函数main中的调用area(6)有关。6是常数,它只能传给常量引用(const int &r),而不能传给非常量引用(int &r)。你可以通过下面的程序来验证。
程序1:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通不过编译!
程序2:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通过了编译!
程序3:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
system("pause");
return 0;
}
通过了编译!
#5
你可能有疑问:为什么你上面给出的程序通过了编译?
那是因为你有两个area()函数,所以在主函数main()中area(6)调用的是计算三角面积的area()函数。
其次:你如果你把程序改成下面任何一种,又会出现重载二意性,而不能通过编译:
程序1:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
程序2:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
因为在主函数main()中area(6)[或者area(a)]的调用中,函数int area(const int &r)和int area(int h = 4,int r = 5)都是精确比配的函数,所以出现了二意性。
那是因为你有两个area()函数,所以在主函数main()中area(6)调用的是计算三角面积的area()函数。
其次:你如果你把程序改成下面任何一种,又会出现重载二意性,而不能通过编译:
程序1:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
程序2:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
因为在主函数main()中area(6)[或者area(a)]的调用中,函数int area(const int &r)和int area(int h = 4,int r = 5)都是精确比配的函数,所以出现了二意性。
#6
你把程序改成下面这种就可以达到你的目的,但是我觉得别扭的要死,但愿你没有这种感觉!嘿嘿!
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(double h = 4,double r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(double h = 4,double r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
#7
楼上兄弟讲得很细,很好,有空交流一下.
还有,我是来得分,我只要星星.
还有,我是来得分,我只要星星.
#8
谢谢大家说了这么多,也提出了不少解决方法,但是有一点我说得不太清楚,就是我们老师作业的要求:
面向对象程序设计第4周上机题
关于函数重载、缺省参数和引用的实验
写一个关于求面积的重载函数area(),分别能够求圆面积和三角形的面积,最后在main函数中输入参数并调用该函数,得出任意给定的圆或三角形的面积。
要求:1、求圆面积函数的参数为圆的直径的引用,并令其数据类型为整形,。
·在函数中试修改参数的值,并将修改后的值在main()函数中显示。
2、求三角形面积函数的参数是其底和高,在此函数中出现缺省参数。
·在main函数中用多种方式调用带缺省参数的area()函数。
目的:1、体会函数重载的意义和条件
2、体会缺省参数的使用方法
3、体会引用作为参数与直接传参数值的区别
面向对象程序设计第4周上机题
关于函数重载、缺省参数和引用的实验
写一个关于求面积的重载函数area(),分别能够求圆面积和三角形的面积,最后在main函数中输入参数并调用该函数,得出任意给定的圆或三角形的面积。
要求:1、求圆面积函数的参数为圆的直径的引用,并令其数据类型为整形,。
·在函数中试修改参数的值,并将修改后的值在main()函数中显示。
2、求三角形面积函数的参数是其底和高,在此函数中出现缺省参数。
·在main函数中用多种方式调用带缺省参数的area()函数。
目的:1、体会函数重载的意义和条件
2、体会缺省参数的使用方法
3、体会引用作为参数与直接传参数值的区别
#9
首先,程序并没有要求传递常量参数,所以改成变量就解决了。
第二,回答你的问题,area(6)
在程序中被认为int area(int h = 4,int r = 5)的调用
其中 h=6,r=5
第二,回答你的问题,area(6)
在程序中被认为int area(int h = 4,int r = 5)的调用
其中 h=6,r=5
#10
#include <iostream>
using namespace std;
int area( int &r)
{
int a = r/2;
int ret = 3.14*a*a;
r=r+1;
return ret;
}
double area(double h = 4,double r = 5)
{
double ret = h*r/2;
return ret;
}
int main()
{
int r=6;
cout<<"直径为6的圆的面积为:"<<area(r)<<endl;
cout<<"直径修改为:"<<r<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"高为3底为默认的三角形面积为:"<<area(3)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
using namespace std;
int area( int &r)
{
int a = r/2;
int ret = 3.14*a*a;
r=r+1;
return ret;
}
double area(double h = 4,double r = 5)
{
double ret = h*r/2;
return ret;
}
int main()
{
int r=6;
cout<<"直径为6的圆的面积为:"<<area(r)<<endl;
cout<<"直径修改为:"<<r<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"高为3底为默认的三角形面积为:"<<area(3)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
#1
呵呵,你最好贴出代码来大家好帮你看看,你
目前所给的信息是不是少了点?
目前所给的信息是不是少了点?
#2
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
}
三次调用全都调用的第二个函数,怎么才能调用第一个呢?
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
}
三次调用全都调用的第二个函数,怎么才能调用第一个呢?
#3
因为你是用引用(int &r)做参数,而一个文字量(就是6呀,3呀,2呀那些)是不能作为引用的。另一方面,计算三角形面积那个函数的参数是按值传递的,可以接受文字量,所以所有的调用都被指向它。解决办法有两个:
1.修改圆面积计算函数的参数
int area( int r )// 不要提供缺省值,否则调用area()时编译器就不知道你是要调用哪一个了
或者:
int area( const int& r )// 文字量量可以作为常量引用
2.修改调用方式:
int r = 6;
cout << area( r );
不过有一点不明白,为什么你要用引用作为参数?难道要在函数内修改它?
1.修改圆面积计算函数的参数
int area( int r )// 不要提供缺省值,否则调用area()时编译器就不知道你是要调用哪一个了
或者:
int area( const int& r )// 文字量量可以作为常量引用
2.修改调用方式:
int r = 6;
cout << area( r );
不过有一点不明白,为什么你要用引用作为参数?难道要在函数内修改它?
#4
我来回答你的问题吧!希望对你有帮助!
首先计算圆面积的函数定义有问题,问题在参数不应该声明为int &r,而应该生民为const int &r。因为这和你在主函数main中的调用area(6)有关。6是常数,它只能传给常量引用(const int &r),而不能传给非常量引用(int &r)。你可以通过下面的程序来验证。
程序1:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通不过编译!
程序2:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通过了编译!
程序3:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
system("pause");
return 0;
}
通过了编译!
首先计算圆面积的函数定义有问题,问题在参数不应该声明为int &r,而应该生民为const int &r。因为这和你在主函数main中的调用area(6)有关。6是常数,它只能传给常量引用(const int &r),而不能传给非常量引用(int &r)。你可以通过下面的程序来验证。
程序1:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通不过编译!
程序2:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
system("pause");
return 0;
}
通过了编译!
程序3:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
system("pause");
return 0;
}
通过了编译!
#5
你可能有疑问:为什么你上面给出的程序通过了编译?
那是因为你有两个area()函数,所以在主函数main()中area(6)调用的是计算三角面积的area()函数。
其次:你如果你把程序改成下面任何一种,又会出现重载二意性,而不能通过编译:
程序1:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
程序2:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
因为在主函数main()中area(6)[或者area(a)]的调用中,函数int area(const int &r)和int area(int h = 4,int r = 5)都是精确比配的函数,所以出现了二意性。
那是因为你有两个area()函数,所以在主函数main()中area(6)调用的是计算三角面积的area()函数。
其次:你如果你把程序改成下面任何一种,又会出现重载二意性,而不能通过编译:
程序1:
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
程序2:
#include <iostream>
using namespace std;
int area(int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(int h = 4,int r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
int a=6;
cout<<"直径为6的圆的面积为:"<<area(a)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
因为在主函数main()中area(6)[或者area(a)]的调用中,函数int area(const int &r)和int area(int h = 4,int r = 5)都是精确比配的函数,所以出现了二意性。
#6
你把程序改成下面这种就可以达到你的目的,但是我觉得别扭的要死,但愿你没有这种感觉!嘿嘿!
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(double h = 4,double r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
int area(const int &r)
{
int a = r/2;
int ret = 3.14*a*a;
return ret;
}
int area(double h = 4,double r = 5)
{
int ret = h*r/2;
return ret;
}
int main()
{
cout<<"直径为6的圆的面积为:"<<area(6)<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
#7
楼上兄弟讲得很细,很好,有空交流一下.
还有,我是来得分,我只要星星.
还有,我是来得分,我只要星星.
#8
谢谢大家说了这么多,也提出了不少解决方法,但是有一点我说得不太清楚,就是我们老师作业的要求:
面向对象程序设计第4周上机题
关于函数重载、缺省参数和引用的实验
写一个关于求面积的重载函数area(),分别能够求圆面积和三角形的面积,最后在main函数中输入参数并调用该函数,得出任意给定的圆或三角形的面积。
要求:1、求圆面积函数的参数为圆的直径的引用,并令其数据类型为整形,。
·在函数中试修改参数的值,并将修改后的值在main()函数中显示。
2、求三角形面积函数的参数是其底和高,在此函数中出现缺省参数。
·在main函数中用多种方式调用带缺省参数的area()函数。
目的:1、体会函数重载的意义和条件
2、体会缺省参数的使用方法
3、体会引用作为参数与直接传参数值的区别
面向对象程序设计第4周上机题
关于函数重载、缺省参数和引用的实验
写一个关于求面积的重载函数area(),分别能够求圆面积和三角形的面积,最后在main函数中输入参数并调用该函数,得出任意给定的圆或三角形的面积。
要求:1、求圆面积函数的参数为圆的直径的引用,并令其数据类型为整形,。
·在函数中试修改参数的值,并将修改后的值在main()函数中显示。
2、求三角形面积函数的参数是其底和高,在此函数中出现缺省参数。
·在main函数中用多种方式调用带缺省参数的area()函数。
目的:1、体会函数重载的意义和条件
2、体会缺省参数的使用方法
3、体会引用作为参数与直接传参数值的区别
#9
首先,程序并没有要求传递常量参数,所以改成变量就解决了。
第二,回答你的问题,area(6)
在程序中被认为int area(int h = 4,int r = 5)的调用
其中 h=6,r=5
第二,回答你的问题,area(6)
在程序中被认为int area(int h = 4,int r = 5)的调用
其中 h=6,r=5
#10
#include <iostream>
using namespace std;
int area( int &r)
{
int a = r/2;
int ret = 3.14*a*a;
r=r+1;
return ret;
}
double area(double h = 4,double r = 5)
{
double ret = h*r/2;
return ret;
}
int main()
{
int r=6;
cout<<"直径为6的圆的面积为:"<<area(r)<<endl;
cout<<"直径修改为:"<<r<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"高为3底为默认的三角形面积为:"<<area(3)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}
using namespace std;
int area( int &r)
{
int a = r/2;
int ret = 3.14*a*a;
r=r+1;
return ret;
}
double area(double h = 4,double r = 5)
{
double ret = h*r/2;
return ret;
}
int main()
{
int r=6;
cout<<"直径为6的圆的面积为:"<<area(r)<<endl;
cout<<"直径修改为:"<<r<<endl;
cout<<"高为3底为2的三角形面积为:"<<area(3,2)<<endl;
cout<<"高为3底为默认的三角形面积为:"<<area(3)<<endl;
cout<<"默认的三角形面积为:"<<area()<<endl;
system("pause");
return 0;
}