C++面向对象程序设计之C++的初步知识(4)

float area(float r=6.5);  //指定r的默认值为6.5。
area();        //相当于area(6.5)
area(7.5);        //形参得到的值为7.5,而不是6.5

如果有多个形参,可以使每个形参都有一个默认值,也可以只对一部分形参指定默认值,另一部分不指定默认值。

实参与形参的结合是从左至右顺序进行的,因此指定默认值的参数必须放在形参表列中的最右端,否则出错。例如:

void f2(float a, int c, int b=0,char d='a');        //正确写法,默认值在形参表列中的最右端
//函数调用
f2(3.5, 5, 3, 'x')                    //形参的值全部从实参获得
f2(3.5, 5, 3)                    //******最后一个形参的值取默认值'a'
f2(3.5, 5)                        //最后两个形参的值取默认值,b=0,d='a'

注意:一个函数不能既作为重载函数,又作为有默认参数的函数。

1.3.7 变量的引用

1.引用的概念

在C++中,变量的“引用”就是变量的别名,因此引用又称为别名。

假如有一个变量a,想给它起一个别名b,可以这样编写:

int a;
int &b=a;            //声明b是一个整型变量的引用变量,它被初始化为a

这就声明了b是a的“引用”,即a的别名。

对变量声明一个引用,并不另外开辟内存单元,b和a都代表同一变量单元。

当b作为了a变量的引用后,不能再作为其他变量的引用。

2.引用的简单实用

#include<iostream>
using namespace std;
int main() 
{
int a=10;
int &b=a;            //声明b是a的引用
a=a*a;                //a的值变化了,b的值也应一起变化
cout<<a<<b<<endl;
b=b/5;                //b的值变化了,a的值也应一起变化
cout<<b<<a<<endl;
system("pause");
return 0;
}

3.关于引用的简单说明

引用及被引用对象必须是相同类型,即整型对整型,浮点对浮点。

引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配分配存储空间。

当&a的前面有类型符时(如int &a),它必然是对引用的声明;如果前面没有类型符(如p=&a),此时的&是取地址运算符。

当b作为了a变量的引用后,不能再作为其他变量的引用。

b是a的引用,c也可以是b的引用,即可以用一个引用初始化另一个引用,其中a,b,c是同一地址;但存在一个疑问,书上显示“整型变量a有两个别名,即a和b”,为什么a的别名不是b和c?不知是书上的错误还是理解不够深刻。经过测试,a,b,c的空间地址是相同的。

代码如下:

#include<iostream>
using namespace std;
int main()
{
int a=3;
int &b=a;
int &c=b;
cout<<&a<<" "<<endl;        //输出a的内存地址
cout<<&b<<" "<<endl;        //输出b的内存地址
cout<<&c<<" "<<endl;        //输出c的内存地址,结果显示a,b,c的地址相同
system("pause");
return 0;
}

4.将引用作为函数参数

4.1.将变量名作为实参

例1.10 无法实现两个变量的值互换的程序

#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp = a;
a=b;
b=temp;
}

int main()
{
int i=3,j=5;
swap(i,j);
cout<<i<<","<<j<<endl;    //3,5 不能实现互换
system("pause");
return 0;
}   

变量作为实参不能互换

程序分析:在本例中,a和b开辟临时空间,a和b的空间换了,但i和j的内存空间不变,随着程序结束,a和b的内存被释放。

4.2.传递变量的指针

例1.11 使用指针做形参,实现两个变量的值的互换

#include<iostream>
using namespace std;
void swap(int *p1,int *p2)
{
int temp;
temp = *p1;
*p1=*p2;
*p2=temp;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/704a395fc66352bfe16e015f30ba1748.html