~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

参考《C++程序设计语言》更新于:2020-06-27 02:31:28

形式A

+

 

-

 

*

 

/

 

%

形式B

^

&

|

~

!

 

形式C

=

>

>=

<

<=

>>

>>=

<<

例:根据标准库学习的一种重载形式

#include "stdafx.h"
#include <process.h>
#include <iostream>
#include <windows.h>
#include <fstream.h>

class User{
public:
    int m_nAge;
    User(int nAge):m_nAge(nAge){}
    /*
        重载运算符<<(二元运算符),形参为函数指针
    */
    User& operator<<(User&(*F)(User&)){
        F(*this);
        return (*this);
    }
    User& operator<<(const int& age){
        std::cout<<age;
        return (*this);
    }
};
User& Prefix(User& user){
    std::cout<<"[User] ";
    return user;
}
User& endl(User& user){
    std::cout<<std::endl;
    return user;
}

int main(int argc, char* argv[])
{
    User user(90);
    user<<Prefix<<user.m_nAge<<endl;
    return 0;
}

 

<<=

==

!=

 

形式D

++

--

形式E

->

->*

,

形式 F

[]

()

形式G

new

new[]

delete

delete[]

形式H

+=

-=

*=

/=

%=

^=

&=

|=

形式I

&&

||

 

第一个例子:如果有一个类A,实现A+2.

根据上面的定义,可以在类A的成员函数内实现,代码如下:

class A{
public:
    A(){}
    A(int v){
        _v = v;
    }
    A operator+(int param){
        A a;
        a._v = _v + param;
        return a;
    }
    int getA(){ return _v; }
private:
    int _v;
};
int _tmain(int argc, _TCHAR* argv[])
{
    A a(20);
    A b = a + 2;
    std::cout << b.getA() << std::endl;
    return 0;
}

也可以在全局中实现

posted on 2019-09-18 21:18  LuoTian  阅读(215)  评论(0编辑  收藏  举报