1.什么是运算符重载

运算符重载是一种函数重载。

运算符函数的格式:
operatorop(argument-list)
例如,operator+()重载+运算符。
其中的op,必须是有效的C++运算符,如operator@()会报错,因为C++中没有@运算符。

2.重载运算符的使用

如下例所示:

class Test
{
public:
Test operator+(Test &test);
}

调用运算符函数的方式有两种:
Test t1;
Test t2;
1)普通函数调用
Test t3 = t1.operator+(t2);
2)运算符方式调用,实质上是调用的1)中的operator+()函数
Test t3 = t1+t2;

3.运算符重载示例
示例代码如下,+运算符重载,计算时分相加。

mytest.h

#pragma once
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=);
Time operator+(const Time&t) const;
void Show() const;
};

mytest.cpp

#include "mytest.h"
#include<iostream>
Time::Time()
{
hours=minutes=;
}
Time::Time(int h,int m)
{
hours = h;
minutes = m;
}
Time Time::operator+(const Time &t) const
{
Time sum;
sum.minutes = minutes+t.minutes;
sum.hours = hours+t.hours+sum.minutes/;
sum.minutes%=;
return sum;
}
void Time::Show() const
{
std::cout<<hours<<" hours, "<<minutes<<" minutes"<<std::endl;
}

test.cpp

#include "mytest.h"
#include <iostream>
int main()
{
Time planning;
Time coding(,);
Time fixing(,);
Time total; total = coding+fixing; std::cout<<"coding+fixing = ";
total.Show(); total = coding.operator+(fixing);
std::cout<<"coding.operator+(fixing) = ";
total.Show(); total = coding+fixing+coding;
std::cout<<"coding.operator+(fixing) = ";
total.Show(); return ;
}

输出结果:

4.运算符重载的注意事项:
1)重载的运算符必须是有效的C++运算符
2)运算符操作数至少有一个是用户定义类型
这是为了防止重载标准类型的运算符
如将减法运算符(-)重载为计算两个double的和,而不是差,是不被允许的。
3)不能违反运算符原有的规则
如求模运算符(%),必须要有两个操作数。
4)部分运算符不允许重载
如:sizeof,::,:等

参考资料:《C++ Primer.Plus》 pp.381-390

C++运算符重载详解的更多相关文章

  1. c/c++面试题(6)运算符重载详解

    1.操作符函数: 在特定条件下,编译器有能力把一个由操作数和操作符共同组成的表达式,解释为对 一个全局或成员函数的调用,该全局或成员函数被称为操作符函数.该全局或成员函数 被称为操作符函数.通过定义操 ...

  2. C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)

    下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,l ...

  3. CPP-基础:运算符重载详解

    1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功 ...

  4. C++11运算符重载详解与向量类重载实例(<<,>>,+,-,*等)

    1. C++运算符重载介绍 C ++ 中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作.这时就必须在C ++ 中重新定义这些运算符,赋予已 ...

  5. C++重载>>和<<(输入和输出运算符)详解

    转载:http://c.biancheng.net/view/2311.html 在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据 ...

  6. Kotlin——最详细的操作符与操作符重载详解(上)

    本篇文章为大家详细的介绍Koltin特有的操作符重载.或许对于有编程经验的朋友来说,操作符这个词绝对不陌生,就算没有任何编辑基础的朋友,数学中的算数运算符也绝不陌生.例如(+.-.*./.>.& ...

  7. [java基础] 002 - 位运算符的详解和妙用

    一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...

  8. ...:ES6中扩展运算符(spread)和剩余运算符(rest)详解

    1.扩展运算符(spread) demo1:传递数据代替多个字符串的形式 let test= function(a,b,c){ console.log(a); console.log(b); cons ...

  9. C++函数重载详解

    我们在开瓶瓶罐罐的时候,经常会遭遇因各种瓶口规格不同而找不到合适的工具的尴尬.所以有时候就为了开个瓶,家里要备多种规格的开瓶器.同样是开个瓶子嘛,何必这么麻烦?于是有人发明了多功能开瓶器,不管啤酒瓶汽 ...

随机推荐

  1. Ubuntu 14.10 下Server版本中文乱码问题

    在安装Ubuntu server 14.10 时候选择了中文版,但是装好系统发现,里面的中文有乱码,解决办法 打开 /etc/default/locale sudo nano /etc/default ...

  2. MySQL创建数据表

    *  创建数据表 * *       *      一.什么是数据表 * *           * *      二.创建数据表的SQL语句模型 * *          DDL * *       ...

  3. 浅谈对CSS的认识

    自从进公司也有2个多月了,相信和我一批进来的小伙伴们都收获了很多东西,这个是在学校所学不到的,也让成长了很多.作为新人的我,从认为CSS是个很简单的东西,到现在觉得CSS中水很深,感觉学了很多的CSS ...

  4. 3、C#基础整理(语句概述)

    语句 语句分为四个大类: * 分支语句:if,if... else,if ...else if... else,switch case * 循环语句:for,while,do while,foreac ...

  5. magento添加分类属性

    在magento中给产品添加自定义属性是很容易实现在后台就可以很轻易添加,但是给分类就不行了,magento本身没有提供给category添加自定义属性.在实际的运用过程中我们想给cagegory添加 ...

  6. 转载: SQL Server中的索引

    http://www.blogjava.net/wangdetian168/archive/2011/03/07/347192.html 1 SQL Server中的索引 索引是与表或视图关联的磁盘上 ...

  7. dede文章摘要字数的设置方法

    本文转自:http://blog.csdn.net/yxwmzouzou/article/details/17491991 在织梦系统中(针对5.7版本),文章摘要(可以通过以下四种相关标签调用)被设 ...

  8. VS2012 编译 Assimp

    VS2012 编译 Assimp 环境: assimp-3.1.1Windows 7 64BitVisual Studio 2012CMake 2.8.12.1 注意: 在Windows中编译assi ...

  9. codeforce The Art of Dealing with ATM

    题目大意 ATM取款机有n种不同的钱币kind[i],每次取款允许吐出不超过k张钱币,且钱币的种类数不能超过2(一开始没理解2的意思),现在有q次取款,钱数为ques,问ATM能否凑出这样的钱,若能的 ...

  10. 关于 System.IO.FileAttributes 的 Reparse Points

    关于Reparse Points找到下面的解释,要是能有更进一步的解释说明就更好了 Reparse Points其实是一个用户自定义的数据集合,它可以包含在一个文件或目录中.这种格式的数据能够被特定的 ...