【翁恺】27-运算符重载-基本规则

overloaded operators  重载几乎所有的运算符 

  • allows user-defined types to act like built in types

  • another way to make a function call

  • unary and binary operators can be overloaded:

    + - * / % ^(异或) & | ~
    = < > += -= *= /= %=
    ^= &=  |= << >> <<= >>= ==
    != <= >= ! && || ++ --
        , ->* -> () []

    operator new operator delete

    operator new[] operator delete[]

operators you can't overload 不能重载

	. .* :: ?:
	sizeof typeid
    static_cast dynamic_cast const_cast
    reinterpret_cast

Restrictions   限制条件

  • only existing operators can be overloaded(you can't create a ** operator for exponentiation)  已经存在的运算符可以被重载
  • operators must be overloaded on a class or enumeration type  
  • overloaded operators must:
    • preserve number of operands   保持原有操作数的个数
    • preserve precedence(优先级)  保持优先级

c++ overloaded operator

  • just a function with an operator name!  写一个函数

    • use the "operator" keyword as a prefix to name

      operator *(...)  // 重载 * 号
  • can be a member function  成员函数

    • implicit first argument
    const String String::operator +(const String& that);  //this + that
  • can be a global (free) function  全局函数

    • both arguments explicit
    const String operator +(const String& r,const String& l);

how to overload

  • an member function    成员函数
    • implicit first argument    this是第一个参数
    • no type conversion performed on receiver(运算符左值)    
    • must have access to class definition

在编译的时候,能看到operator+的函数体默认变成内联函数,而且返回值只是为了能返回,在函数里并没有用,所以在这个函数里的拷贝构造是被优化的。

使用成员函数,编译器从左到右扫描,看用谁的运算符。

1. x + y,        编译器从左到右扫描,用x的operator+,两个intrger类型;

2. z = x + 3,  编译器从左到右扫描,用x的operator+,integer里面有函数将int 3转化为integer的类型(构造函数);

3. z = 3 + y,    编译器从左到右扫描,用int 3的+,integer里面没有将nteger的类型转化为int类型的函数;×

4. z = x + 3.5 ,用x的operator+,double 到 int 不能自动转换,需要强制类型转换  × 

  • for binary operaters(+,-,*,etc) member functions require one argument.  二元运算符需要一个参数

  • for unary operators (unary -,!,etc) member functions require no arguments:   一元不改自己,制造出来一个新的对象来

    const Integer operator-() const{
        return Integer(-i);
    }
    ...
    z=-x;    //z.operator=(x.oprator-()); 

 operator- ,this仍然是const,不改自己,产生一个新的对象。

  • as a global function   两个算子都要写上
    • explicit first argument
    • type conversions performed on both arguments
    • can be made a friend
    • type conversions performed on both arguments

global operators(friend)

class Integer{
    friend const Integer operator+(const Integer&rhs,const Integer& lhs); // 
    ...
}
const Integer operator+(const Integer&rhs,const Integer& lhs){  // 全局函数
    return Integer(lhs.i,rhs.i);
}
  • binary operators require two arguments

  • unary operators require one argument

  • conversion

    • z=x+y;//ok

    • z=x+3;//ok

    • z=3+y;//ok

    • z=3+7;//ok

 
  • if you don't have access to private data members, then the global function must use the pubic interface

tips: members vs. free functions

  • unary operators should be members 单目的应该是成员的

  • = () -> ->* must be members 必须

  • assignment operators should be members

  • all other binary operators as non-members 非成员的

### 回答1: 翁恺ct-dist的文件夹是指翁恺在编程项目中常用的文件夹之一。CT-Dist是一个常用的开源项目,用于计算文本之间的相似性。在这个项目中,翁恺通常会使用ct-dist文件夹来存放与CT-Dist相关的代码、配置文件和数据文件。 在ct-dist文件夹中,可能会包含以下内容: 1. 源代码文件:这些文件包含了CT-Dist项目的核心代码,用于实现文本相似性计算的算法和功能。这些代码文件通常以.py或.java等编程语言的扩展名为后缀。 2. 配置文件:这些文件用于设置CT-Dist项目的参数和选项,以便根据具体需求对文本相似性计算进行定制。配置文件的内容可以包括输入输出路径、特征提取方法、权重设置等。 3. 数据文件:CT-Dist项目在计算文本相似性时需要使用的数据文件,如语料库、词向量文件等。这些数据文件可以通过配置文件中的路径进行指定,并被代码读取和处理。 除此之外,ct-dist文件夹还可能包含测试文件、文档文件和结果输出文件等。测试文件用于验证CT-Dist项目的正确性和稳定性,文档文件则包含了关于CT-Dist项目的详细说明和使用指南。结果输出文件则保存了CT-Dist计算得到的文本相似性结果。 总之,翁恺ct-dist的文件夹是存放与CT-Dist项目相关的代码、配置文件和数据文件的文件夹。它是翁恺在编程项目中的一个重要组成部分,用于实现文本相似性计算的功能。 ### 回答2: 翁恺ct-dist是一个文件夹,它可能是一个软件项目的一部分。ct-dist是一个常用的命名约定,通常表示"可执行项目的构建产物",也可以解释为"编译和分发的文件夹"。在这个文件夹中,通常包含了经过编译和处理过的项目文件,以便进行部署和分发。 在ct-dist文件夹中,我们通常可以看到一些特定的文件和文件夹。其中包括编译后的可执行文件,如二进制文件或可执行脚本,这些文件通常表示程序的最终产物。还可能包含一些配置文件,用于指定程序的运行环境和参数设置。此外,ct-dist文件夹中还可能包含一些资源文件,如图片、样式文件或其他必要的外部文件,这些文件在程序运行过程中可能需要被引用。 翁恺ct-dist文件夹的存在对于项目的部署和分发非常重要。通过将编译后的可执行文件和其他必要的文件放在同一个文件夹中,开发人员可以方便地进行项目的打包和分发。这样,其他用户或部署人员只需要将整个ct-dist文件夹复制到他们的机器上,即可执行项目,而不需要再去处理源代码或其他依赖项。 总之,翁恺ct-dist文件夹是一个存放编译、处理后的项目文件的文件夹,它对于项目的部署和分发起着重要作用。通过将项目的最终产物和必要的资源文件集中在一个文件夹中,简化了项目的部署过程,使其他用户可以更轻松地使用和执行这个项目。 ### 回答3: 翁恺ct-dist文件夹是一个用于存放由翁恺所开发的CT(Computer Tomography,计算机断层扫描)图像处理程序的文件夹。CT-dist是翁恺开发的一个用于计算机断层扫描图像分析和处理的软件包。 CT(Computer Tomography)是一种医学成像技术,通过利用X射线在人体内进行多个角度的扫描,然后将这些扫描数据进行重建,得到人体不同层面的断层图像。CT图像具有丰富的信息,可以帮助医生进行疾病诊断和治疗方案制定。但是,由于CT图像数据量大、复杂、难以直接观察和分析,因此需要借助计算机进行图像处理和分析。 翁恺ct-dist文件夹中存放的程序主要用于CT图像分析和处理。这些程序包括了一系列的算法和方法,可以实现CT图像的预处理、降噪、增强、分割和三维重建等功能。通过这些程序,医生和研究人员可以提取出感兴趣的区域,进行病变检测和定量分析,从而辅助医学诊断和研究。 翁恺ct-dist文件夹的程序主要基于计算机视觉和数字图像处理的理论和方法。翁恺是计算机视觉和医学图像处理领域的专家,他的研究成果在CT图像分析和处理方面具有重要的应用价值。因此,翁恺ct-dist文件夹中的程序不仅可以促进医学图像处理的研究和发展,同时也对于提高CT图像的质量和临床应用具有重要的意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理心炼丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值