实验目的和要求
熟悉引用的概念,掌握引用的定义方法,学会引用在C++程序中的应用。
掌握函数的定义和调用方法。
练习承载函数的使用。
实验内容
调试下列程序,写出输出结果,并解释输出结果。
(1)//sy2_1.cpp
//sy2_1.cpp
#include<iostream>
using namespace std;
int main()
{
double dd=3.9,de=1.3;
double &rdd=dd,&rde=de;
cout<<rdd+rde<<','<<dd+de<<endl;
rdd=2.6;
cout<<rdd<<','<<dd<<endl;
de=2.5;
cout<<rde<<','<<de<<endl;
return 0;
}
输出结果:
![](https://i-blog.csdnimg.cn/blog_migrate/599b9edb77afee8a24c07d7d92aa9b1d.png)
结果分析:dd和de分别对rdd和rde进行了引用,对rdd或rde的数据操作等同于对dd与de的操作。
(2)//sy2_2.cpp
#include<iostream>
using namespace std;
int main()
{
void fun(int,int&);
int a,b;
fun(2,a);
fun(3,b);
cout<<"a+b="<<a+b<<endl;
return 0;
}
void fun(int m,int &n)
{
n=m*4;
}
输出结果:
![](https://i-blog.csdnimg.cn/blog_migrate/a7a595f0c8096ef9f48933cd6f8c8b03.png)
结果分析:定义了一个一个对m和n进行运算的fun函数,程序调用fun函数对a和b进行同等运算。
(3)://sy2_3.cpp
#include<iostream>
using namespace std;
int &fun(int);
int aa[5];
int main()
{
int a=5;
for(int i(0);i<5;i++)
fun(i)=a+i;
for(i=0;i<5;i++)
cout<<aa[i]<<" ";
cout<<endl;
return 0;
}
int &fun(int a)
{
return aa[a];
}
编译结果:
![](https://i-blog.csdnimg.cn/blog_migrate/3fe3a9d2782f219e010be9b41c5953d0.png)
修改后程序:
#include<iostream>
using namespace std;
int &fun(int);
int aa[5];
int main()
{
int a=5;
int i;
for(i=0;i<5;i++)
fun(i)=a+i;
for(i=0;i<5;i++)
cout<<aa[i]<<" ";
cout<<endl;
return 0;
}
int &fun(int a)
{
return aa[a];
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/04a6535a01e30095d74bf3d155f455e1.png)
结果分析:在原来的程序中,i 是被定义在 for 循环内的一个局部变量,无法在程序的其他地方进行数值运算与调用,将 i 在 main 函数中进行定义,便可以直接在 main 函数中进行调用。
2.编程完成下列任务。
(1)编写一个函数,用于将华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。(sy2_4。cpp)
程序源代码:
#include<iostream>
using namespace std;
int fc(int f);
int main()
{
int c,f;
cout<<"请输入华氏度:";
cin>>f;
c=fc(f);
cout<<endl<<"对应的摄氏度:"<<c<<endl;
return 0;
}
int fc(int f)
{
return (f-32)*5/9;
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/f3d9c2bb366158e53fc078716108fe58.png)
(2)编写重载函数max1可分别求2个整数、3个整数、2个双精度数、3个双精度数的最大值(sy2_5.cpp)
程序源代码:
程序源代码:
#include<iostream>
using namespace std;
int max1(int,int);
int max1(int,int,int);
double max1(double,double);
double max1(double,double,double);
int main()
{
double l,a,b,c;
int i;
cout<<" 1.2个整型数据"<<endl;
cout<<" 2.3个整型数据"<<endl;
cout<<" 3.2个双精度数据"<<endl;
cout<<" 4.3个双精度数据"<<endl;
cout<<"输入所需功能的编号:";
cin>>i;
cout<<"请输入要比较的数据:";
switch(i)
{
case 1:
cin>>a>>b;
l=max1(a,b);
break;
case 2:
cin>>a>>b>>c;
l=max1(a,b,c);
break;
case 3:
cin>>a>>b;
l=max1(a,b);
break;
case 4:
cin>>a>>b>>c;
l=max1(a,b,c);
break;
}
cout<<l<<endl;
}
int max1(int a,int b)
{
return a>b?a:b;
}
int max1(int a,int b,int c)
{
return (a>b?a:(b>c?b:c));
}
double max1(double a,double b)
{
return a>b?a:b;
}
double max1(double a,double b,double c)
{
return (a>b?a:(b>c?b:c));
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/7f6c2da6d53195ce11db5d586f91e4f6.png)
分析与讨论
1. 总结引用的概念及用途。
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用 (reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。
2. 函数的定义和调用方法。
main就是一个函数,它是C++程序的主函数。一个C++程序可以由一个主函数和若干子函数组成。主函数是程序执行的开始点。由主函数调用子函数,子函数还可以再调用其它子函数。
调用其它函数的函数称为主调函数。被其他函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被其它函数调用。
3. 重载函数是通过什么来区分?
1. 函数形参的个数
2. 函数形参的类型
3. 形参的顺序
4. 不能把返回值作为函数重载的条件,原因是编译器在编译时不会去判断函数的返回类型,函数只有调用 后,编译器才会去验证返回类型,所以返回值不能作为函数重载的依据。
2. 函数的定义和调用方法。
main就是一个函数,它是C++程序的主函数。一个C++程序可以由一个主函数和若干子函数组成。主函数是程序执行的开始点。由主函数调用子函数,子函数还可以再调用其它子函数。
调用其它函数的函数称为主调函数。被其他函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被其它函数调用。
3. 重载函数是通过什么来区分?
1. 函数形参的个数
2. 函数形参的类型
3. 形参的顺序
4. 不能把返回值作为函数重载的条件,原因是编译器在编译时不会去判断函数的返回类型,函数只有调用 后,编译器才会去验证返回类型,所以返回值不能作为函数重载的依据。
5. 常函数 const 可以作为函数重载判断依据,原因:重载[]运算符时,有没有const的区别是:有 const只读,没有const读写都可以。