zoukankan      html  css  js  c++  java
  • C++——几种常见的运算符重载

    几种常见的运算符重载

        运算符重载,就是对现有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

       形式如下:  

    1 (返回类型)operator运算符(参数列表)
    2 {
    3       .......  
    4 }

      (1)左移(<<) 和右移(>>)运算符

     1 #include<iostream>
     2 using namespace std;
     3 class Person
     4 {
     5     public:
     6     int age;
     7 };
     8 ostream& operator<<(ostream &cout,Person &p)
     9 {
    10     cout<<p.age;
    11     return cout;
    12 } 
    13 void operator>>(istream &cin,Person &p)
    14 {
    15     cout<<"请输入年龄:"<<endl;
    16     cin>>p.age;
    17 }
    18 void test01()
    19 {
    20     Person p1;
    21     cin>>p1;
    22     cout<<"年龄是:";
    23     cout<<p1<<endl;
    24 }
    25 int main(int argc, char const *argv[])
    26 {
    27     test01();
    28     return 0;
    29 }

    运行结果:

    在21行和23行的代码中,我们可以看到左移和右移操作符都是对p1进行的,但是我们的输入输出实际上只能对内置的数据类型,进行操作,因此我们必须要对运算符惊醒重载,包括我们接下来要写的几种运算符也都是这样。

      (2)前置++和后置++运算符

     1 #include<iostream>
     2 using namespace std;
     3 #include<string.h>
     4 class Myint
     5 {
     6     public:
     7     int myint;
     8     Myint(){}
     9     Myint(int myint)
    10     {
    11         this->myint = myint;
    12     }
    13     Myint& operator++()
    14     {
    15         this->myint = this->myint + 1;
    16         return *this;
    17     }
    18     Myint operator++(int)
    19     {
    20         Myint tmp = (*this);
    21         this->myint = this->myint + 1;
    22         return tmp;
    23     }
    24 };
    25 ostream& operator<<(ostream &cout,Myint &m)
    26 {
    27     cout<<m.myint;
    28     return cout;
    29 }
    30 void test01()
    31 {
    32     Myint m1(20);
    33     cout<<++m1<<endl;
    34     m1++;
    35     cout<<m1<<endl;
    36 }
    37 int main(int argc, char const *argv[])
    38 {
    39     test01();
    40     return 0;
    41 }

    运行结果:

      (3)=运算符 

     1 #include<iostream>
     2 using namespace std;
     3 #include<string.h>
     4 class Person
     5 {
     6 public:
     7     Person(){}
     8     Person(int age,char* name)
     9     {
    10         this->age = age;
    11         this->name = new char[strlen(name)+1];
    12         strcpy(this->name,name);
    13     }
    14     ~Person()
    15     {
    16         cout<<"析构"<<endl;
    17         delete []name;
    18     }
    19     void show();
    20     Person& operator=(Person &p1)
    21     {
    22         this->age = p1.age;
    23         this->name = new char[strlen(p1.name)+1];
    24         strcpy(this->name,p1.name);
    25         return *this;
    26     }
    27     int age;
    28     char *name;
    29 };
    30 void Person::show()
    31 {
    32     cout<<this->age<<" "<<this->name<<endl;
    33 }
    34 void test01()
    35 {
    36     Person p1(20,"bob");
    37     p1.show();
    38     Person p2;
    39     p2 = p1;
    40     p2.show();
    41 }
    42 int main(int argc, char const *argv[])
    43 {
    44     test01();
    45     return 0;
    46 }

      运行结果:

    (4)==和!=运算符

     1 #include<iostream>
     2 using namespace std;
     3 class Person
     4 {
     5 public:
     6     int age;
     7     string name;
     8     Person(int age,string name)
     9     {
    10         this->age = age;
    11         this->name =name; 
    12     }
    13     void show()
    14     {
    15         cout<<age<<" "<<name<<endl;
    16     }
    17     int operator==(Person &p)
    18     {
    19         return this->age==p.age&&this->name==p.name;
    20     }
    21     int operator!=(Person &p)
    22     {
    23         return this->age!=p.age||this->name!=p.name;
    24     }
    25 };
    26 void test01()
    27 {
    28     Person p1(15,"hello");
    29     Person p2(13,"Linux");
    30     Person p3(15,"hello");
    31     p1.show();
    32     p2.show();
    33     p3.show();
    34     if(p1 == p3)
    35     {
    36         cout<<"相等"<<endl;
    37     }
    38     if(p1 != p2)
    39     {
    40         cout<<"不相等"<<endl;
    41     }
    42 
    43 }
    44 int main(int argc, char const *argv[])
    45 {
    46     test01();
    47     return 0;
    48 }

      运行结果:

  • 相关阅读:
    集合-ArrayList 源码解析
    >>《配色设计原理.pdf》
    >>《[美国视觉设计学院用书:完成设计(从理论到实践)].(萨马拉).温迪等.扫描版.pdf》
    《Photoshop智能手机APP界面设计.pdf》
    《贴心设计:打造高可用性的移动产品》——5.平板电脑和电子书阅读器
    3H Buy a Ticket —— Dij
    最短路板子
    3E A Simple Problem —— 数论
    3D 城池攻占 —— 左偏树
    3A Least Cost Bracket Sequence —— 贪心
  • 原文地址:https://www.cnblogs.com/953-zjf/p/13971851.html
Copyright © 2011-2022 走看看