11.编写验证自己的reset函数 使其作用于引用类型的参数
知识点1:使用引用形参跟使用指针形参一样,可以改变实参的值。
知识点2:使用引用的好处 避免在形参初始化的时候进行拷贝。
知识点3:当函数有多个返回值时,可以使用引用形参返回这个值
#include "stdafx.h"
#include <iostream>
#include <string> //C++中输入输出string类型变量
using namespace std;
//测试引用传参
int reset(string &MyString,char c,int &val)
{
bool MyBool = true; //局部变量
int FirstPosition =0; //局部变量 定义第一个位置
for (int i = 0; i < MyString.size();i++)
{
if (MyString[i] == c)
{
if (MyBool)
{
FirstPosition = i;
MyBool = false;
}
val++; //隐私返回指定字符出现的个数
}
}
return FirstPosition+1; //返回指定字符第一次出现的位置
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "请输入字符串";
string MyString;
cin >> MyString;
cout << "请输入目标字符";
char MyChar;
cin >> MyChar;
int MyVal=0;
int Pos = reset(MyString,MyChar,MyVal);
cout << "目标字符第一次出现的位置是:"<<Pos << endl;
cout << "目标字符出现的次数为:" << MyVal << endl;
return 0;
}
12.用引用传参交换两个值
#include "stdafx.h"
#include <iostream>
using namespace std;
void fact(int &a,int &b) //引用形参可以改变实参的值
{
int c = a;
a = b;
b = c;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i = 5;
int j = 9;
fact(i, j);
printf("i是%d,j是%d", i, j); //输出结果正好相反
return 0;
}
引用传参的方式更好一些 知识点有讲
13.
前者以传值方式传入参数,不能修改实参。后者是引用传参,以传址的方式传入参数,可以修改实参。
14.举一个形参可以是引用类型的例子,再举一个形参不能是引用类型的例子。
简单的说,如果实参需要修改,则应是引用类型。
15.
常量引用的作用 :既不想进行拷贝 又不想对实参进行更改
普通引用:不对实参进行拷贝 可以对实参进行更改
16.指出下列函数的局限性并改善。
字符串在函数中无需修改 加入const 表示常量引用
17.编写一个函数判断string对象是否含有大写字母,编写另一个函数 把string对象全都改写成小写。 形参类型相同么 为什么?
判断是否有大写字母函数
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
//判断是否有大写字母
bool faction1(string const &MyString) //不需要改变实参
{
for (int i = 0; i < MyString.size();i++)
{
if (MyString[i] >= 'A' && MyString[i] <= 'Z')
{
return true;
}
else
{
return false;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "请输入字符串" << endl;
string MyString;
cin >> MyString;
if (faction1(MyString))
{
cout << "含有大写字符" << endl;
}
else
{
cout << "不含有大写字符串" << endl;
}
return 0;
}
将大写字母改写成小写函数
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
//大写字母改变小写字母
void faction1(string &MyString) //需要改变实参
{
for (int i = 0; i < MyString.size(); i++)
{
if (MyString[i] >= 'A' && MyString[i] <= 'Z')
{
MyString[i] = MyString[i] + 32;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << "请输入字符串" << endl;
string MyString;
cin >> MyString;
faction1(MyString);
cout << "改变之后是" << MyString<<endl;
return 0;
}
18.为函数编写函数声明 推测函数具备的功能
(a)
//题目没有说的很清楚 const最好加上把
bool compare(matrix const &m1,matrix const &m2){/.../}
(b)
vector<int>::iterator change_val (int a,vector<int>::iterator b){/.../}
19.判断调用合法与不合法
(a)不合法
(b)合法
(c)合法
(d)合法
20.什么时候应该是常量引用 ?常量引用改为普通引用 会发生什么情况?
一般情况 不需要改变实参的情况下最好都用const
有可能导致不必要的错误 比如改变实参