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与后面的运算符@共同组成了该运算符函数的函数名。

时间: 2024-08-29 06:03:14

C++学习摘要之七:运算符重载的相关文章

C++学习摘要之四:虚函数和多态

多态性与前面提到的数据封装和继承性共同构成了面向对象程序设计的三个重要机制. 1.静态联编与动态联编 由于函数重载的存在,当程序中出现调用同名函数时,编译器会根据函数的参数类型.个数决定调用 执行哪一个同名函数的代码,这种把一个函数的调用与适当的函数实现代码联系在一起的过程,叫做联编 .根据联编的实现阶段的不同,可将其分为静态联编和动态联编两种. 静态联编是在程序编译阶段确定一个函数调用与函数实现代码间的对应关系,这种对应关系确定下来 后,在程序运行过程中就根据这个对应关系去调用执行相应的函数代

C++运算符重载函数基础及其值返回状态

运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的. 例子如下: class Test{ //过程省略}int main(){ Test a,c; c=a+a;} 当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的. 在c++中要想实现这样的

运算符重载-C++为什么要重载运算符?

问题描述 C++为什么要重载运算符? 我是java程序员,最近在学习C++.看到运算符重载这块的时候感到很不解,说是可以解决多态的问题,自定义运算.呐为什么不直接用多态函数实现这些功能,何必非得使用这些运算符来执行这些操作? 解决方案 有用到的地方还是重载方便,比如对象对与象相加"+" 原运算符不能满足就自实现方式,面向对象调用起来是最方便的 //obj3 = obj1 + obj2; 解决方案二: 有时候用操作符更加直观啊,也不用记函数名什么的.Java的目标是简化C++的复杂功能,

C02-程序设计基础提高班(C++)第11周上机任务-运算符重载

第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) [任务1]实现复数类中的运算符重载定义一个复数类重载运算符+.-.*./,使之能用于复数的加减乘除.(1)方案一:请用类的成员函数完成运算符的重载: class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Comple

c++-C++ 编程 运算符重载

问题描述 C++ 编程 运算符重载 c++重载编程 编写一个Customer类,包括账号.密码.姓名.余额(初始为0). 用两种方法重载运算符"-",使得两个Customer对象相减,能得到它们余额之差 想要用户自己输入用户余额,用户相减为余额之差 解决方案 C++中运算符重载的几种方法的适用性探讨 方法如下,具体代码还要你自己动手编写,学习不能偷懒的. 解决方案二: class Customer { ... public: Custom operator-(const Custom&

《21天学通C++(第7版)》——第12章 运算符类型与运算符重载

第12章 运算符类型与运算符重载 21天学通C++(第7版) 关键字class让您不仅能够封装数据和方法,还能封装运算符,以简化对对象执行的操作.通过使用这些运算符,可以像第5章处理整数那样,对对象执行赋值或加法运算.与函数一样,运算符也可以重载. 在本章中,您将学习: 使用关键字operator: 单目运算符与双目运算符: 转换运算符: C++11新增的移动复制运算符: 不能重新定义的运算符. 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

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

C++单目运算符重载 单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等.重载单目运算符的方法与重载双目运算符的方法是类似的.但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数. 下面以自增运算符"++"为例,介绍单目运算符的重载. [例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算.要求输出分和秒的值. #

(一二二)运算符重载——第十一章

本章重点是类设计技术,而不是通用原理.   C++的重点是多使用. 正如我之前写了这么多的学习笔记一样,几乎绝大部分的代码,都是我根据书上的知识,然后理解自行再创造写下的.虽然遇见了不少问题,但解决后,下次再遇见这类情况,解决起来很轻松,绝大多数都可以直接靠记忆书写代码,即使个别忘记了,回头翻一番笔记,基本也能解决,需要靠百度去解决的,已经很少了.     运算符重载是一种形式的C++多态(就像函数重载那样,同名但调用不同的函数).   要重载运算符,需要使用被称为运算符函数的特殊函数形式.运算

《C和C++代码精粹》——1.12 运算符重载

1.12 运算符重载 C和C++代码精粹在C++中你可以重载运算符,例如,定义一个复数的数据类型如下: struct complex { double real, imag; }; 假如能使用中缀符号用于复数加法,那将会相当方便.如: complex c1,c2; - complex c3=c1+c2; 当编译器遇到如c1+c2这样的表达式时,将查找下边两个函数中的一个(只须其中的一个存在): operator+(const complex&,const complex &); //全局函