`

C++学习摘要之七:运算符重载

 
阅读更多

C++语言中预定义的运算符的操作对象只能是基本数据类型,但是,在实际应用中,对于很多用户自定义数据类型(如类)也需要类似的功能,这就需要对已有的运算符赋予多种含义,使同一个运算符具有作用于不同类性的数据导致不同类型的行为,这就是运算符重载。因此,运算符重载的目的是设置C++语言中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算。可见,运算符重载的优点是允许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的类似运算。

   运算符重载的实质是函数重载。事实上,C++语言中的每一个运算符对应着一个运算符函数,在实现过程中,把指定的运算表达式中的运算符转化为对运算符函数的调用,而表达式中的运算对象转化为运算符函数的实参,这个过程是在编译阶段完成的。例如:

   int a=1,b=2;

   a+b;

   表达式“a+b”在编译前,将被解释为函数调用形式:operator+(a,b)。

   其中,operator是一个关键字,它与后面的“+”共同组成了该运算符函数的函数名。

   运算符重载是一种特殊的函数重载。在类中可以采用下述两种方法对运算符函数进行重载。

   1.重载为类的成员函数

   将运算符函数重载为类的成员函数是指在类中定义一个同名的运算符函数,其语句格式为:

   TYPE X::operator@(形参表)

   {

   //函数体

   //重新定义运算符@在指定类X中的功能

   }

   其中,operator是关键字,@是需要被重载的运算符,X是需要重载该运算符的类名,TYPE是该运算符函数的返回值类型。关键字operator与后面的运算符@共同组成了该运算符函数的函数名。

   2.重载为类的友元函数

   可以定义一个与某一运算符函数同名的全局函数,然后再将该全局函数声明为类的友元函数,从而实现运算符的重载。其语法格式为:

   friend TYPE operator@(形参表);

   下面介绍运算符重载的几个问题:

   l         以上两种重载形式均可访问类的私有成员;

   l         几乎所有的运算符都可以被重载,但下列运算符不允许重载:

   “。”、“。*”、“::”、“?:”

   l         运算符重载后,既不会改变原运算符的优先级和结合特性也不会改变使用运算符的语法和参数个数;

   l         “=”、“()”、“[]”和“->”等运算符不能重载为友元函数;

   l         当运算符重载为类的成员函数时,函数的参数个数比原来的运算对象少一个(右++和右——除外);当重载为类的友元函数时,参数个数与原运算符的运算个数相同;单目运算符最好重载为类的成员函数,而双目运算符则最好重载为类的友元函数。

分享到:
评论

相关推荐

    详解C++编程中的单目运算符重载与双目运算符重载

    C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和–i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数...

    C++ 课程作业 多态性 运算符重载-综合(Point类)

    请定义一个Point类,将前置++和后置++运算符重载为成员函数,实现成员变量m_x和m_y的加一操作 同时重载流插入运算符,实现对Point类对象的格式化输出。例如 Point p; cout; 输出结果为: (0,0) 请根据给定的main...

    实验项目五:类和对象_实验项目六:运算符重载.zip

    实验项目五:类和对象 实验项目六:运算符重载

    C++运算符重载 详细介绍PPT

    详细介绍 C++运算符重载 的PPT 文中部分内容: 下标运算符“[ ]”重载 C++把下标运算符[ ]看成一个双目运算符,其操作数为<基本表达式>和<表达式>,对应的运算符为operator[ ],必须重载为一个成员函数。对于下标...

    C++作业实验-运算符重载

    主要是C++中,运算符重载的编写的实验,环境VS2010,内容很基本,与类相关

    运算符重载和函数重载

    如运算符重载和函数重载 字符串连接,+=运算符重载 求子串: 左边几个字符,,, Left(int nCount) 右边几个,, Right(int nCount) 某个位置开始的几个字符 Mid(int nPos,int nCout) 2..进一步熟悉掌握对类的构造...

    C++程序设计课件 ch10 运算符重载

    C++程序设计课件 第十章 运算符重载 10.1 什么是运算符重载 10.2 运算符重载的方法 10.3 重载运算符的规则 10.4 运算符重载函数作为类成员函数和友元函数 10.5 重载双目运算符 10.6 重载单目运算符 10.7 重载流...

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

    这个是使用C++是实现的矩阵基本运算,使用了运算符重载技术和动态生成数组技术!

    C++实验报告实验七-运算符重载

    实验七 运算符重载 一、实验目的 (1).编写程序熟悉运算符重载函数的定义和使用; (2).编写程序熟悉重载单目和双目运算符的方法; (3).编写程序熟悉流插入和提取运算符的重载; 二、实验要求 1、创建一个二维...

    c++ 集合类运算符重载

    c++中,有一种集合类运算符重载的算法,该示例程序中提供了很多的重载类型。

    C++ 上课/复习ppt运算符重载.pptx

    C++ 上课/复习ppt运算符重载.pptx

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

    C++允许重载的运算符和不允许...C++运算符重载的规则 C++对运算符重载定义了如下几条规则。 1) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 例如,有人觉得BASIC中用“**“作为幂运算符很方便

    运算符重载的基本内容

    因此,运算符重载的目的是设置C++语言中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算。可见,运算符重载的优点是允许改变使用于系统内部的运算符的操作方式,以适应...

    运算符重载实例.

    C++程序,利用运算符的重载在VC下编译。

    C++运算符重载

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

    C++运算符重载课件PPT及实例

    此课件内容包括: 1 运算符 2 运算符重载概述 3 运算符重载的两种形式(重点) 运算符是代表某种运算功能的符号。 课件中讲解的实例也在些文件中。

    C++程序设计 运算符重载实验(一)

    C++程序设计实验——运算符重载,涉及单目、双目运算符的重载

    C++源文件<<运算符重载的源代码

    C++基础的源代码,运算符重载的相关知识,源代码较为清晰可靠,并且在VC++6.0中能够编译运行,如有错误,敬请指教

    c++本科作业 矩阵运算 运算符重载

    For this task, put your code in the following files: Matrix.cpp, Matrix.h. You are to write a class Matrix which includes appropriate fields associated with 2*2 matrices. A 2*2 matrix takes the ...

    C++语言程序设计教程:第4章 运算符重载.ppt

    C++语言程序设计教程:第4章 运算符重载.ppt

Global site tag (gtag.js) - Google Analytics