C++:运算符重载函数
5.运算符重载
5.1 在类外定义的运算符重载函数
C++为运算符重载提供了一种方法,即在运行运算符重载时,必须定义一个运算符重载函数,
其名字为operator,后随一个要重载的运算符。例如,要重载"+"号,应该写一个名字为operator
的函数,其他的运算符也是如此。
函数 功能
operator+ 加法
operator- 减法
operator* 乘法
operator< 小于
因此,若要两个对象相加,需要先定义一个运算符重载函数operator+,例如:
class Complex{
public:
double real,imag;
Complex(double r=;doubble i=)
{
real = r;
imag = i;
}
};
Complex operator+(Complex om1,Complex om2)
{
Complex temp;
temp.real = om1.real+om2.real;
temp.imag = om1.imag+om2.imag;
return temp;
}
这样,就可以方便使用语句:
int main()
{
Complex com1(1.1,2.2),com2(3.3,4.4),total;
//total = com1+com2;
//total = operator+(com1,com2);
return ;
}
//上述两个注释语句是等价的,显然前者更简单明了。
//例5.1 两个Complex类对象相加的完整程序
#include<iostream>
using namespace std;
class Complex{
public:
double real,imag;
Complex(double r=,double i=)
{
real = r;
imag = i;
}
};
Complex operator+(Complex om1,Complex om2) //定义运算符+的重载函数
{
Complex temp;
temp.real = om1.real+om2.real;
temp.imag = om1.imag+om2.imag;
return temp;
}
int main(int argc, char** agrv)
{
Complex com1(1.1,2.2),com2(3.3,4.4),total1,total2;
total1 = com1+com2; //调用运算符重载函数operator的第一种方式
cout<<"total1.real="<<total1.real<<","<<"total1.imag="<<total1.imag<<endl;
total2 = operator+(com1,com2); //调用运算符重载函数operator的第二种方式
cout<<"total2.real="<<total2.real<<","<<"total2.imag="<<total2.imag<<endl;
return ;
}
C++对运算符重载指定如下一些规则:
(1)不允许重载的运算符有:
.(成员访问运算符) .*(成员指针访问运算符) ::(作用域符) Sizeof(长度运算符) ?:(条件运算符)
(2)不允许用户定义新的运算符作为重载运算符
(3)重载的功能应当与原有的功能相类似(+就是实现加法,-就是实现减法)
(4)重载不能改变运算符的操作对象(即操作数)。例如,"+"就是一个双目运算符(即只能代两个操作数),重载后仍为双目运算符,需要两个参数。
(5)重载不能改变运算符原有的优先级。但是可以采用加"()"的办法进行强制转换。
(6)重载不能改变运算符原有的结合特性.例如,乘除法运算符都是从左往右结合的.必要时,可以采用加"()"的办法
(7)运算符重载函数的参数至少应有一个是类对象(或类对象的引用)。也就是说,运算符重载函数的参数不能全是C++的标准型(基本数据类型)。目的是:防止用户修改标准类型数据的运算符性质。
(8)运算符重载函数可以是普通函数,也可以是类的成员函数,还可以是类的友元函数。
(9)一般而言,用于类对象的运算符必须重载,但是赋值运算符"="除外,不必用户进行重载,系统已经为每一个新声明的类重载了一个赋值运算符函数,它的作是逐个复制类的数据成员,可以直接用于对象之间的赋值,用户不必自己编写运算符重载函数。
C++:运算符重载函数的更多相关文章
- C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用
5.2.5 "++"和"--"的重载 对于前缀方式++ob,可以用运算符函数重载为: ob.operator++() //成员函数重载 或 operator++ ...
- C++:成员运算符重载函数和友元运算符重载函数的比较
5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...
- C++:运算符重载函数之成员运算符重载函数
5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- C++:友元运算符重载函数
运算符重载函数:实现对象之间进行算数运算,(实际上是对象的属性之间做运算),包括+(加号).-(减号).*./.=.++.--.-(负号).+(正号) 运算符重载函数分为:普通友元运算符重载函数.成员 ...
- C++ 类型转化(运算符重载函数)和基本运算符重载(自增自减)
类型转化(运算符重载函数) 用转换构造函数可以将一个指定类型的数据转换为类的对象.但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据).在C ...
- 《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数
C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁 //站点:www.cn ...
- 《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态
C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...
- swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)
swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...
随机推荐
- openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)
原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...
- linux常用命令收集(持续中)
mv : 既可以重命名,又可以移动文件或文件夹 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录的话也是 ...
- [ERROR] Failed to open log
版本:5.5.14 性能测试部-测试环境数据库 1.在性能测试过程中大量的日志,测试人员直接使用 rm -rf 删除所有 2.重启数据库时,出现报错,导致数据库无法启动,查看报错日志,报错信息如下: ...
- myeclipse配置下tomcat debug启动很无比慢
myeclipse配置下tomcat debug启动很无比慢,而run启动很快今天照常使用MyEclipse 6.5 Blue Edition进行开发,但是却遇到一个怪问题.在MyEclipse环境下 ...
- 如何在eclipse中添加android ADT
百度经验:http://jingyan.baidu.com/article/b0b63dbfa9e0a74a4830701e.html 截图:
- Careercup - Facebook面试题 - 5733320654585856
2014-05-02 09:59 题目链接 原题: Group Anagrams input = ["star, astr, car, rac, st"] output = [[& ...
- 在MAC上安装虚拟机搭建Ubuntu开发环境
由于工作需要,需要在LINUX环境搭建服务器,但是工作中使用的是MAC系统,只好用虚拟机来搭建LINUX服务器环境.下面记录介绍一下搭建步骤以供需要的人参考使用. 下载准备 虚拟机使用VMWare ...
- Linux查看系统基本信息
问题描述: 查看系统基本信息 问题解决: (1)lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具. 用法: lspci -v (1.1) ...
- JQuery图片延迟加载插件,动态获取图片长宽尺寸
以前的网站带宽小,没有特别多的大图,现在不同了,各种图片网站如同雨后春笋层出不穷.服务器是抗住了,但是客户端就有意见了,太多的图片必然导致页面加载缓慢,特别是有些table结构的站点更是如此.能否让图 ...
- 【BZOJ】【1430】小猴打架
排列组合 蛮逗的…… 这题题干描述的就一股浓浓的Kruskal的气息……很容易就想到是求一个n个点的完全图的生成树个数,然后由于有序,再乘一个n-1的排列数(n-1条边的全排列)即(n-1)! 但是我 ...