练习6.11:编写并验证你自己的reset函数,使其作用于引用类型的参数。
练习6.12:改写6.2.1节中练习6.10(第188页)的程序,使用引用而非指针交换两个整数的值。你觉得哪种方法更易于使用呢?为什么?
答:使用引用更容易
练习6.13:假设类型T是某种类型的名字,说明以下两个函数声明的区别:一个是void f(T),另一个是void f(&T)
答案:参见程序练习6.14就明白了,就是void f(&T) 引用的形参绑定了实参,一旦引用的形参发生变化,实参也会跟着变化。而void f(T),实参传过来,作用范围仅在函数内部,本身实参没有变化。
练习6.14:举一个形参应该是引用类型的例子,再举一个形参不能是引用类型的例子。
答:见程序练习6.14
练习6.15:说明find_char函数中的三个形参为什么是现在的类型,特别说明为什么S是常量引用而occurs是普通引用?为什么s和occurs是引用类型而c不是?如果令s是普通引用会发生什么情况?如果令occurs是常量引用会发生什么情况?
答:字符串s的长度固定,且s本身不允许被修改,所以s是常量引用,occurs变化,反映了c可能出现的次数,c是输入的参数,字符串里可能没有,occurs如果是常量引用,则不能被改动,因此就不能实现统计次数的功能。
练习6.11
/*
*练习6.11
*2015/6/10
*问题描述:练习6.11:编写并验证你自己的reset函数,使其作用于引用类型的参数。
*功能:重置一个数
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
using namespace std;
void Reset(int &val)
{
val = 0;
}
int main()
{
int val = 0;
cout << "please input a number! " << endl;
while (cin >> val)
{
cout << "Before Reseting : The number is: " << val << endl;
Reset(val);
cout << "After Reseting: The number is: " << val << endl;
}
return 0;
}
练习6.12
/*
*练习6.12
*2015/6/10
*问题描述:练习6.12:改写6.2.1节中练习6.10(第188页)的程序,使用引用而非指针交换两个整数的值。你觉得哪种方法更易于使用呢?为什么?
*功能:交换
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
using namespace std;
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int x(0),y(0);
cout << "please input two numbers! " << endl;
while (cin >> x >> y)
{
cout << "Before swapping , they are :" << x << " " << y << endl;
swap(x,y);
cout << "After swapping , they are :" << x << " " << y << endl;
}
return 0;
}
练习6.14
/*
*练习6.14
*2015/6/10
*问题描述:练习6.14:举一个形参应该是引用类型的例子,再举一个形参不能是引用类型的例子。。
*功能:传值和传应用的比较
*说明:针对题目本身,例子并不好举,但可以比较传值和传引用的区别
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
using namespace std;
void Reset1(int val)
{
val = 0;
}
void Reset2(int &val)
{
val = 0;
}
int main()
{
cout << "input two number!" << endl;
int a;
cin >> a ;
cout << "a is : " << a << endl;
Reset1(a);
cout << "After calling Reset1() : " << a << endl; // a的值没有变
Reset2(a);
cout << "After calling Reset2() : " << a << endl; // a也变成0
return 0;
}