实验十一 引用与复制构造函数

一.实验目的

1、 掌握引用的概念及应用,掌握引用作为函数参数的方法。 2、 学会编写与应用复制构造函数。

二. 实验内容

1、范例:编写一个函数,其原型为:void Index(int a[], int n,int & sub),其功能是,在大小为n的数组a中,查找某个数sub,

若找到,将其下标存放在sub中,若没找到,将-1存放在sub中,在主调函数中通过判断值来判断数组中是否有该数。在这里,sub是引用类型的参数,但起返回值的作用。

【程序】

 

【要求】

(1)修改主程序连续查找数字的循环语句,使程序能在输入特定数字后退出循环。

(2)将void Index(int a[], int n,int & sub); 改为void Index(int a[], int n,int sub);程序还能正确执行吗?试分析其结果并解释。

(3)在上述修改的基础上如果结果不正确,怎样修改可以同样得到正确的结果。

2、一个声明为返回引用的函数,既可以作为右值出现在赋值号的右边,也可以作为左值出现在赋值号的左边。下面是一个函数调用本身作为左值的例子。  

 

【要求】

修改程序使用非返回引用的函数实现上述功能。试分析两者之间的区别。

3、为矩形类定义复制构造函数。矩形类见主教材的例4.2.

在rect.h 头文件中的类rect定义中加入以下代码:

Rectangle(const Rectangle & rhs);

在rect.cpp文件中添加以下代码:

Rectangle::Rectangle(const Rectangle & rhs):m_left(rhs.m_left),m_top(rhs.m_top),m_right(rhs.m_right),m_bottom(rhs.m_bottom){

}//复制构造函数

在main( )函数中添加以下代码,单步调试时进入复制构造函数,查看其调用情况:

Rectangle rect2(rect1);

cout < < ”由复制构造函数生成的rect2:”<<< endl;

rect2.Show( );