zoukankan      html  css  js  c++  java
  • 一元运算符重载

    就是操作数只有一个 比如自增自减的

    有两种方式实现重载

    一种是所谓成员函数重载,

    调用方式:1. @a; 2. a.operator@()

    另一种是作为友元函数重载

    调用方式:1 @a; 2.operator(a)

    先说第一种吧,举个例子

    需要注意到,一元运算符作为成员函数重载,里面是没有参数的

    class x
    {
    ...
    T operator@(){...};
    //等价于T operator@(x *this) this 是 指针参数由系统自动添加的是一个隐含参数
    };
    T为返回类型,@为重载的运算符

    woc,我写的时候不知道有time这个类库,我重名了。改了半个小时才意识到,人都快被气死了

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 class Time
     5 {
     6 private:
     7    int h,m,s;
     8 public:
     9     Time(int hour,int minute,int second);
    10     Time& operator++();
    11     void display();
    12 
    13 };
    14 
    15 Time::Time(int hour,int minute,int second)
    16 {
    17     h = hour;
    18     if(h == 24) h = 0;
    19     m = minute;
    20     if(m == 60) m = 0;
    21     s = second;
    22     if(s == 60) s = 0;
    23 }
    24 
    25 
    26 Time& Time::operator++()
    27 {
    28     ++s;
    29     if(s == 60)
    30     {
    31         s = 0;
    32         ++m;
    33         if(m == 60)
    34         {
    35             m = 0;
    36             ++h;
    37             if(h == 24) h = 0;
    38         }
    39     }
    40     return *this;
    41 }
    42 
    43 void Time::display()
    44 {
    45     cout << h << ":" << m << ":" << s << endl;
    46 }
    47 
    48 void test()
    49 {
    50     Time t0(23,59,59);
    51     t0.display();
    52     ++t0;//显氏调用
    53     t0.display();
    54     t0.operator++();//隐氏调用
    55     t0.display();
    56 }
    57 
    58 int main()
    59 {
    60     test();
    61     return 0;
    62 }
    View Code

     

    作为友元函数重载

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 class Time
     5 {
     6 private:
     7    int h,m,s;
     8 public:
     9     Time(int hour,int minute,int second);
    10     friend Time& operator++(Time &t);
    11     void display();
    12 
    13 };
    14 
    15 Time::Time(int hour,int minute,int second)
    16 {
    17     h = hour;
    18     if(h == 24) h = 0;
    19     m = minute;
    20     if(m == 60) m = 0;
    21     s = second;
    22     if(s == 60) s = 0;
    23 }
    24 
    25 
    26 Time& operator++(Time &t)
    27 {
    28     ++t.s;
    29     if(t.s == 60)
    30     {
    31         t.s = 0;
    32         ++t.m;
    33         if(t.m == 60)
    34         {
    35             t.m = 0;
    36             ++t.h;
    37             if(t.h == 24) t.h = 0;
    38         }
    39     }
    40     return t;
    41 }
    42 
    43 void Time::display()
    44 {
    45     cout << h << ":" << m << ":" << s << endl;
    46 }
    47 
    48 void test()
    49 {
    50     Time t0(23,59,59);
    51     t0.display();
    52     ++t0;//显氏调用
    53     t0.display();
    54     operator++(t0);//隐氏调用
    55     t0.display();
    56 }
    57 
    58 int main()
    59 {
    60     test();
    61     return 0;
    62 }
  • 相关阅读:
    找水王
    第十四周学习记录
    第十三周学习记录
    第十二周学习记录
    序列化
    哪个元素出发事件
    阻止默认行为-event.preventDefault();
    阻止时间冒泡 -event.stopPropagation();
    HTML5的LocalStorage和sessionStorage的使用 -缓存
    同步加载、异步加载、延迟加载
  • 原文地址:https://www.cnblogs.com/mch5201314/p/11590194.html
Copyright © 2011-2022 走看看