C++笔记4.50

知识点5 运算符重载

1、运算符重载的概述

运算符重载,就是对已有的运算符进行重新定义,赋予其另外一种功能,以适应不同数据类型,从而达到简化操作的目的。

语法:使用operator然后紧跟重载的运算符构成。

2、运算符<<的重载

  1. #include <iostream>  
  2. #include <cstring>  
  3.   
  4. using namespace std;  
  5.   
  6. class Person  
  7. {  
  8.     //设置成友元在函数内访问person类中的所有数据  
  9.     friend ostream& operator<<(ostream &out, Person &ob);  
  10. private:  
  11.     char* name;  
  12.     int num;  
  13. public:  
  14.     Person(char* name, int num)  
  15.     {  
  16.         this->name = new char[strlen(name)+1];  
  17.         strcpy(this->name,name);  
  18.         this->num = num;  
  19.         cout << "有参构造" << endl;  
  20.     }  
  21.   
  22.     void printPerson(void)  
  23.     {  
  24.         cout << "name = " << name << ", num = " << num << endl;  
  25.     }  
  26.   
  27.     ~Person()  
  28.     {  
  29.         if(this->name != NULL)  
  30.         {  
  31.             delete [] this->name;  
  32.             this->name = NULL;  
  33.         }  
  34.         cout << "析构函数" << endl;  
  35.     }  
  36. };  
  37.   
  38. ostream& operator<<(ostream &out, Person &ob)  
  39. {  
  40.     //重新实现输出搁置  
  41.     out << ob.name << ", " << ob.num;  
  42.     //每次执行返回值得到cout  
  43.     return out;  
  44. }  
  45.   
  46. int main()  
  47. {  
  48.     Person ob1("Momoka",19);  
  49.     Person ob2("Monika",18);  
  50.     //运算符重载的调用方法1  
  51.     operator<< (cout, ob1) << endl;  
  52.     //调用方法2  
  53.     cout << ob1 << endl;  
  54.     cout << ob1 << " " << ob2 << endl;  
  55. }  

运算符+的重载 全局函数作为友元完成运算符+的重载

  1. Person operator+(Person &ob1, Person &ob2)  
  2. {  
  3.     //字符串相加  
  4.     char *tmp_name = new char[strlen(ob1.name)+strlen(ob2.name)+1];  
  5.     strcpy(tmp_name,ob1.name);  
  6.     strcat(tmp_name,ob2.name);  
  7.     //num相加  
  8.     int tmp_num = ob1.num + ob2.num;  
  9.     Person tmp(tmp_name, tmp_num);  
  10.     //释放tmp的空间  
  11.     if(tmp_name != NULL)  
  12.     {  
  13.         delete [] tmp_name;  
  14.         tmp_name = NULL;  
  15.     }  
  16.     return tmp;  
  17. }  

成员函数完成运算符+的重载

  1. Person operator+(Person &ob)  
  2. {  
  3.     //this-> &ob1  
  4.     //字符串相加  
  5.     char *tmp_name = new char[strlen(this->name)+strlen(ob.name)+1];  
  6.     strcpy(tmp_name,this->name);  
  7.     strcat(tmp_name,ob.name);  
  8.     //num相加  
  9.     int tmp_num = this->num + ob.num;  
  10.     Person tmp(tmp_name, tmp_num);  
  11.     //释放tmp的空间  
  12.     if(tmp_name != NULL)  
  13.     {  
  14.         delete [] tmp_name;  
  15.         tmp_name = NULL;  
  16.     }  
  17.     return tmp;  
  18. }  

发表评论

邮箱地址不会被公开。 必填项已用*标注