zoukankan      html  css  js  c++  java
  • 运算符重载复习

    分为:双目运算符重载:> < ==

            单目运算符重载:++  --  ()

            流运算符的重载

    1、双目运算符重载

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class A
     6 {
     7 public:
     8     A(string s):str(s) {}
     9     friend bool operator < (const A &a1,const A &a2)
    10     {
    11         if(a1.str < a2.str)
    12             return true;
    13         else
    14             return false;
    15     }
    16 public:
    17     string  str;
    18 };
    19 
    20 int main()
    21 {
    22     A s1("123");
    23     A s2("234");
    24     cout << (s1 <s2) << endl;
    25     return 0;
    26 }

    2、单目运算符重载

     前置与后置的区别:如果形参为空就是前置,如果在形参中增加一个int型形参,那么就是后置。【调式可以看出他们调用函数的不同...】

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class A
     6 {
     7 public:
     8     A(int s):value(s) {}
     9     A operator++()
    10     {
    11         ++value;
    12         return *this;
    13     }
    14     A operator++(int a)
    15     {
    16         value++;
    17         return *this;
    18     }
    19 public:
    20     int  value;
    21 };
    22 
    23 int main()
    24 {
    25     A a(1);
    26     cout << (a++).value << endl;  //2
    27     cout << (++a).value <<endl;   //3
    28     return 0;
    29 }

    小括号运算符

     1 //实例是转载的.
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class Time
     6 {
     7 public:
     8     int h;
     9     int m;
    10     int s;
    11 
    12     Time( int h = 0, int m = 0, int s = 0 )
    13     {
    14         operator()(h,m,s);
    15     }
    16 
    17     //小括号重载 版本0 注意和下面用户自定义转换的区别
    18     int operator()()
    19     {
    20         return h*3600 + m*60 + s;
    21     }
    22 
    23     //用户自定义转换
    24     operator int()
    25     {
    26         return h*3600 + m*60 + s;
    27     }
    28 
    29     //小括号重载 版本1
    30     void operator()(int h)
    31     {
    32         operator()(h,0,0);
    33     }
    34 
    35     //小括号重载 版本2
    36     void operator()(int h, int m)
    37     {
    38         operator()(h,m,0);
    39     }
    40 
    41     //小括号重载 版本3
    42     void operator()(int h, int m, int s)
    43     {
    44         this->h = h;
    45         this->m = m;
    46         this->s = s;
    47     }
    48 
    49     friend ostream & operator << ( ostream & os, const Time & t )
    50     {
    51         os << t.h << "::";
    52         if ( t.m < 10 )
    53         {
    54             os << '0';
    55         }
    56         os << t.m << "::";
    57         if ( t.s < 10 )
    58         {
    59             os << '0';
    60         }
    61         os << t.s;
    62         return os;
    63     }
    64 };
    65 
    66 int main()
    67 {
    68     /*
    69     ** 注意:t(1),t(1,1),t(1,1,1)的用法
    70     ** 像不像“函数调用”
    71     ** 这样的用法称之为仿函数
    72     ** 仿函数在STL里用得特别多
    73     */
    74     Time t;
    75     cout << t << endl;
    76     t(1);                    //小括号重载 版本1
    77     cout << t << endl;
    78     t(1,1);                  //小括号重载 版本2
    79     cout << t << endl;
    80     t(1,1,1);                //小括号重载 版本3
    81     cout << t << endl;
    82     cout << t() << endl;     //小括号重载 版本0
    83     cout << int(t) << endl;  //用户自定义转换[注意]
    84     return 0;
    85 }

    3、流运算符重载

     1 #include <iostream>
     5 using namespace std;
     6 
     7 class A
     8 {
     9 public:
    10     A() {}
    11     A(int a,int b):key1(a),key2(b) {}
    12     /*
    13     ** friend istream& operator >> (istream&  ,自定义类型) 这是流运算符重载的固定格式
    14     */
    15     friend istream& operator >> (istream &is,A &n)
    16     {
    17         is >> n.key1;
    18         is >> n.key2;
    19         return is;
    20     }
    21     /*
    22     ** friend ostream& operator >> (ostream&  ,自定义类型) 这是流运算符重载的固定格式
    23     */
    24     friend ostream& operator << (ostream &out,A &n)
    25     {
    26         out << n.key1<<endl;
    27         out << n.key2;
    28         return out;
    29     }
    30 protected:
    31     int key1;
    32     int key2;
    33 };
    34 
    35 int main()
    36 {
    37     A a(1,2);
    38     cout << a << endl;
    39     A b;
    40     cin >> b;
    41     cout << b << endl;
    42     return 0;
    43 }
  • 相关阅读:
    【Qt开发】01-第一个Qt程序Hello World!
    Git使用总结(三):协同开发常见冲突
    公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS
    通俗理解TCP的三次握手
    Flink安装极简教程-单机版
    程序员工资那些事!
    vim实战:插件安装(Vundle,NerdTree)
    Git使用总结(二):分支管理
    Git使用总结(一):简介与基本操作
    C++11并发编程:多线程std::thread
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2446991.html
Copyright © 2011-2022 走看看