• Chapter 10 Operator Overloading


    1. 重载为成员函数

    双目:

    class ClassName

    {

    public:

     DataType operator@(Parameter List); …

    };

    DataType ClassName::operator@ (Parameter List) { … }

    aa@bb    //or aa . operator @ (bb)

    单目:

    class ClassName

    {

    public:

    DataType operator@(  ); …

    };

    DataType ClassName::operator@ (  ) { … }

    @aa    //or aa.operator @ ( )

    默认为前置

    Complex operator ++ ( );

    后置的话形参列表里有一个int,本身无作用只是为了区分

    Complex Complex∷operator ++ ( int )

    c2=c1++; //or c2=c1.operator++(0);

    1. 重载为友元函数

    class ClassName

    {

    public:

    friendDataType operator@(Parameter List); …

     };

    DataType operator@ (Parameter List) { … }

    aa@bb    //or operator @ (aa , bb)

    默认为前置Complex operator ++ (Complex &c )

    后置的话同理Complex operator ++ (Complex & c, int )

    1. 重载为成员函数:

    双目运算符参数列表有一个参数,单目运算无参数

    重载为友员函数:

    双目运算符参数列表有两个参数,单目运算有一个参数

    1. Rules for Operator Overloading 

    can not define newoperators 

    can not change the numberof operands 

    can not change the precedence 

    can not change the associativity(结合性) 

    can not have default parameters “=”, “( )”, “[ ]”

    can only be overloaded as member functions “.”, “.*”, “::”, “sizeof”, “?:” can not be overloaded

    1. 重载赋值运算符

    ClassName&ClassName::operator =( const ClassName & source )

    {

    real= source.real; imag= source.imag; return *this; //注意返回值

    }

    1. 重载输入输出运算符

    重载为友元函数 friend ostream & operator <<(ostream & , ClassName & );

    ostream & operator <<(ostream & , ClassName & )

    {  

    output<<“( ”<<c.real<<“ , ” <<c.imag<<“i )” <<endl;

    return output;//注意返回值

     }

    friend istream & operator >>(istream & , ClassName & );

    istream & operator >>(istream & input, Complex &c)

    {

    cout<<“Input the real part and” <<“imaginary part of a” <<“complex number:”; input>>c.real>>c.imag;

    return input;

     }

    1. 强制类型转换?

    class ClassName{ public: operator DataType( ); … }

  • 相关阅读:
    如何快速开发一个自己的项目脚手架?
    Vue模板语法中数据绑定
    vue组件间通信八种方式
    浏览器渲染页面流程
    双飞翼布局
    单行截断和多行截断问题
    flex 布局实现固定头部和底部,中间滚动布局
    defer 和 async 区别
    数学之美(统计语言模型)
    react 源码之setState
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/13153817.html
Copyright © 2020-2023  润新知