【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)