实验2 引用与函数

实验目的和要求

  1. 熟悉引用的概念,掌握引用的定义方法,学会引用在C++程序中的应用。
  2. 掌握函数的定义和调用方法。
  3. 练习承载函数的使用。

实验内容

  1. 调试下列程序,写出输出结果,并解释输出结果。

        (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;
}

   输出结果:


    结果分析: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;
}

    输出结果:

    结果分析:定义了一个一个对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];
}

    编译结果:


    修改后程序:

#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];
}
    运行结果:

    结果分析:在原来的程序中,是被定义在 for 循环内的一个局部变量,无法在程序的其他地方进行数值运算与调用,将 在 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;
}

    运行结果:

(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));
}

运行结果:



分析与讨论

        1. 总结引用的概念及用途。

    引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用 (reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。

        2. 函数的定义和调用方法。

    main就是一个函数,它是C++程序的主函数。一个C++程序可以由一个主函数和若干子函数组成。主函数是程序执行的开始点。由主函数调用子函数,子函数还可以再调用其它子函数。

    调用其它函数的函数称为主调函数。被其他函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被其它函数调用。

        3. 重载函数是通过什么来区分?

1. 函数形参的个数
2. 函数形参的类型
3. 形参的顺序
4. 不能把返回值作为函数重载的条件,原因是编译器在编译时不会去判断函数的返回类型,函数只有调用  后,编译器才会去验证返回类型,所以返回值不能作为函数重载的依据。

5. 常函数 const 可以作为函数重载判断依据,原因:重载[]运算符时,有没有const的区别是:有 const只读,没有const读写都可以。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下关于C++中多态和虚函数实验。 首先,多态是指不同对象以不同的方式响应相同的消息的能力。在C++中,通过虚函数来实现多态。虚函数是指在基类中被声明为虚函数函数,在派生类中被重写后,在程序中使用基类指针或引用调用该函数时,会调用派生类中的函数。 下面是一个简单的多态和虚函数实验示例: ```c++ #include<iostream> using namespace std; class Shape { public: virtual void draw() { cout << "Drawing Shape" << endl; } }; class Circle: public Shape { public: void draw() { cout << "Drawing Circle" << endl; } }; class Square: public Shape { public: void draw() { cout << "Drawing Square" << endl; } }; int main() { Shape *s; Circle c; Square sq; s = &c; s->draw(); s = &sq; s->draw(); return 0; } ``` 运行结果为: ``` Drawing Circle Drawing Square ``` 在上述示例中,我们定义了一个基类Shape和两个派生类Circle和Square,分别重写了基类的虚函数draw()。在程序中,我们先定义了一个基类指针s,然后将其指向第一个派生类对象c,再调用s的虚函数draw(),此时会调用派生类Circle的draw()函数,因为指针实际上指向的是Circle类型的对象。接着,我们将指针s重新指向第二个派生类对象sq,再次调用s的虚函数draw(),此时会调用派生类Square的draw()函数。 通过这个实验,我们可以看到多态和虚函数的特性,即通过基类指针或引用调用虚函数时,会根据实际对象的类型来调用相应的派生类函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值