`
soli
  • 浏览: 11097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】C++重载运算符

阅读更多
必要性:C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)。

(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载

(二) C++允许重载的运算符C++中绝大部分的运算符允许重载

不能重载的运算符只有5个
  • (1) 成员访问运算符.
  • (2) 作用域运算符∷
  • (3) 条件运算符?:
  • (4) 成员指针运算符*
  • (5) 编译预处理命令的开始符号#(转者按:应该是 sizeof 运算符)


(三) 重载不能改变运算符运算对象(即操作数)的个数

(四) 重载不能改变运算符的优先级别

(五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾

(六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。

(七) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。

  • ① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
  • ② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。


总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。

运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:

  • (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
  • (2)单目运算符最好重载为成员函数。
  • (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
  • (4) 对于其它运算符,建议重载为友元函数。


运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

引用
函数类型 operator 运算符名称 (形参表列)
{
   对运算符的重载处理
}


重载为类成员函数时,参数个数等于原操作数个数减1(后置++、--除外);
重载为友元函数时,参数个数等于原操作数个数,且至少应该有一个自定义类型的形参。
分享到:
评论

相关推荐

    C++重载运算符实现分数的运算(有界面)

    在C++编程语言中,重载运算符是一种强大的特性,允许我们为已有的运算符赋予新的含义或行为,以适应自定义数据类型。本项目"分数运算器"就是利用这一特性来实现分数的加减乘除等运算,并通过界面提供用户友好的交互...

    重载运算符,测试输入的长度能否构成一个三角形

    在C++编程中,重载运算符是一种强大的特性,它允许我们为已有的运算符赋予新的含义,以适应特定的数据类型。在这个特定的项目中,我们重载了两个运算符:加法运算符"+"和大于运算符"&gt;",用于判断三个边长是否能构成...

    125.C++ 重载运算符和重载函数.txt

    125.C++ 重载运算符和重载函数.txt

    C++运算符重载

    C++运算符重载:赋予运算符另一种作用,实现自定义类型的运算C++运算符重载内容: 1.友元重载 2.类重载 3.输入输出流重载

    C++常用运算符重载简介

    C++常用运算符重载简介 C++运算符重载是指将操作符赋予新的意义,以便在用户定义的类中使用。运算符重载的目的在于将操作符添加到自已的类中,以方便类对象之间的运算,例如使用+、-、*、/等运算符。 为什么要重载...

    对于C++重载的使用方法学习的好例子

    在C++编程语言中,重载(Overload)是一种重要的特性,它允许程序员使用相同的函数名或运算符但带有不同的参数列表。通过这种方式,我们可以在不同的上下文中为一个标识符赋予不同的含义,使得代码更加清晰且易于...

    c++重载增量运算符

    C++重载增量运算符 C++中的增量运算符是非常重要的概念,它可以使得编程更加便捷和高效。然而,在使用增量运算符时,我们需要区分前增量和后增量的区别,这是因为它们的返回值和参数处理方式不同。 1. 前增量...

    C++重载运算符的规则详解

    (1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示35,这是不行的。 (2)C++允许...

    C++ 重载运算符+==-用于字符串的比较

    在C++编程语言中,重载运算符是一种强大的特性,允许我们为已有的运算符赋予新的含义,以适应特定的数据类型。在这个例子中,我们关注的是重载"=="和"!="运算符,以便用于字符串的比较。这在VS2010这样的开发环境中...

    C++重载运算符的几类使用方法.docx

    在C++编程语言中,重载运算符是一种强大的特性,允许程序员为自定义数据类型赋予与内置类型相似的行为。在提供的文件示例中,展示了两种不同的运算符重载方法:非运算符重载和运算符重载作为类的成员函数。我们将...

    详解C++ 重载运算符和重载函数

    当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++ 中的函数重载 在同一个作用...

    c++——运算符重载(四) 源码

    在C++编程语言中,运算符重载是一项重要的特性,它允许我们为已有的运算符赋予新的含义,以便在自定义类型上使用。本篇内容将深入探讨C++中的运算符重载,...因此,在设计类时应谨慎考虑是否需要以及如何重载运算符。

    使用C++实现矩阵运算(运算符重载)

    首先,我们要理解C++中的运算符重载。运算符重载允许我们在不同的上下文中为同一个运算符赋予不同的含义,这在处理自定义数据类型如矩阵时非常有用。例如,我们可以通过重载"+"运算符来实现矩阵的相加,重载"-...

    C++运算符重载规则详解

    C++允许重载的运算符和不允许重载的运算符 C++中绝大部分的运算符允许重载,具体规定见表 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: ...

    C++运算符重载友元函数实例

    这个实例将探讨如何通过成员函数和非成员函数两种方式来重载运算符,以及如何结合友元函数来实现特定的操作。首先,让我们深入理解运算符重载的概念。 **运算符重载原理** 运算符重载并不创建新的运算符,而是为已...

    c++运算符重载和模板

    重载运算符的方法是定义一个函数,该函数的名称是特殊的,通常以"operator"开头,后面跟着要重载的运算符。例如,我们可以为自定义的复数类重载"+"运算符进行复数相加: ```cpp class Complex { public: Complex ...

    c++运算符重载例子

    根据提供的实验报告,我们可以深入探讨C++中的运算符重载技术以及其实现细节。运算符重载是C++中的一项重要特性,它允许用户自定义已存在的运算符在用户自定义类型的操作。通过运算符重载,我们可以为自定义类型提供...

    C++ 函数重载 运算符重载 类型转化

    在C++编程语言中,函数重载(Overloading)和运算符重载(Overloading)是两种关键的多态性实现方式,而类型转化(Type Conversion)则涉及到数据类型的转换和兼容性问题。这些概念是C++程序员必备的知识点,理解和...

    C++重载运算符的几类使用方法.pdf

    在C++编程语言中,运算符重载是一种强大的特性,允许我们为已有的运算符赋予新的含义,以便在自定义类型(如这里的复数类`complex`)上使用。以下是关于C++中运算符重载的详细解释: 1. **非运算符重载实现复数加法...

Global site tag (gtag.js) - Google Analytics