【C++】引用变量--5.将引用用于类对象(核心+难点)
【摘要】 目录
1. 基本概念
2.程序示例
2.1运行结果
3. 程序中3个函数的解读
3.1 string version1(const string & s1, const string & s2)
3.2 const string & version2(string & s1, const string & s2)
3.3 const string & versi...
目录
3.1 string version1(const string & s1, const string & s2)
3.2 const string & version2(string & s1, const string & s2)
3.3 const string & version3(string & s1, const string & s2)
1. 基本概念
将类对象传递给函数时,C++通常的做法是使用引用。例如,使用引用,让函数将类string、ostring、istream、ofstream和ifstream等类的对象作为参数。
2.程序示例
-
// 本程序用来对比不同引用设计效果,可能有部分函数无法编译
-
#include<iostream>
-
#include<string>
-
using namespace std;
-
string version1(const string & s1, const string & s2);
-
const string & version2(string & s1, const string & s2);//有副作用
-
const string & version3(string & s1, const string & s2);//bad
-
-
int main()
-
{
-
string input;
-
string copy;
-
string result;
-
-
cout << "输入一个string:";
-
getline(cin, input);//输入存入到Input中;
-
copy = input;
-
cout << "你输入的string是: " << input << endl;
-
result = version1(input, "***");
-
cout << "version1升级后的string: " << result << endl;
-
cout << "你一开始的input string 现在是: " << input << endl<<endl;
-
-
cout << "你输入的string是: " << input << endl;
-
result = version2(input, "###");
-
cout << "version2升级后的string: " << result << endl;
-
cout << "你一开始的input string 现在是: " << input << endl << endl;
-
-
cout << "重新设定string.\n";
-
input = copy;
-
cout << "你输入的string是: " << input << endl;
-
result = version3(input, "@@@");
-
cout << "version3升级后的string: " << result << endl;
-
cout << "你一开始的input string 现在是: " << input << endl << endl;
-
-
return 0;
-
}
-
-
string version1(const string & s1, const string & s2)
-
{
-
string temp;
-
temp = s2 + s1 + s2;
-
return temp;
-
}
-
-
const string & version2(string & s1, const string & s2)
-
{
-
s1 = s2 + s1 + s2;
-
return s1;
-
}
-
-
const string & version3(string & s1, const string & s2)
-
{
-
string temp;
-
temp = s2 + s1 + s2;
-
return temp;
-
}
2.1运行结果
3. 程序中3个函数的解读
3.1 string version1(const string & s1, const string & s2)
-
string version1(const string & s1, const string & s2)
-
{
-
string temp;
-
temp = s2 + s1 + s2;
-
return temp;
-
}
这个引用效果和下面这个效果一样
-
string version4(string s1, string s2)
-
{
-
string temp;
-
temp = s2 + s1 + s2;
-
return temp;
-
}
但是,引用了效率更高
注意,函数返回类型是string
3.2 const string & version2(string & s1, const string & s2)
-
const string & version2(string & s1, const string & s2)
-
{
-
s1 = s2 + s1 + s2;
-
return s1;
-
}
这个会有副作用
3.3 const string & version3(string & s1, const string & s2)
注意,函数返回类型是string & ,是引用
-
const string & version3(string & s1, const string & s2)
-
{
-
string temp;
-
temp = s2 + s1 + s2;
-
return temp;
-
}
4. 警醒
3.1 和3.3 ,最大的区别在于返回的是引用还是普通的,普通的返回临时变量是存储在一个空间中,返回引用的,不能使用临时变量,因为程序已经释放内存了。
函数返回值有几种类型,这个返回的是string,虽然你看的是返回一个临时变量,其实返回的是这个临时变量的拷贝;如果返回值类型是string&,也就是string的引用,那么就不能返回临时变量了
本节内容总结于8.2.5节
文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。
原文链接:kings.blog.csdn.net/article/details/90743465
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)