网上太多有关运算符的重载了,但是写的太过的详细,不适合新手入门,特别是那什么++和--的前增量后增量重载,一元二元运算符重载,特殊运算符,下标运算符,new和delete,甚至是指针运算符的重载,吓退了多少小伙伴啊。。我这里就写个最基础的,其实原理和写法都差不多,举一反三,多动手才能写好代码。

1.概述

什么是运算符重载?

如果你想让1+1=0,那么就需要让+号不再是相加的意思,而是让它代表相减的意思。所以很明了,运算符的重载实质上就是函数的重载,在这个过程中,编译器帮你完成了下面三个动作:

(1)将指定的运算表达式转化为对运算符函数的调用

(2)将运算对象转化为运算符函数的实参

(3)根据实参的类型来确定调用函数

2.实现

运算符的重载实现有两种形式:

(1)重载为类的成员函数

<函数类型> operator <运算符>(<形参表>)
{
<函数体>;
}

(2)重载为类的友元函数

friend <函数类型> operator <运算符>(<形参表>)
{
<函数体>;
}

3.示例

(1)重载为类的成员函数

Test.h

class Test
{
public:
Test(void):a(0){};
~Test(void){}; Test(int _a):a(_a){}; Test operator + (Test& _test)//重载操作符,返回该类的一个实例
{
int new_a=a+_test.a;
Test new_Test(new_a);
return new_Test;
}; int a;
};

main.cpp

int _tmain(int argc, _TCHAR* argv[])
{
Test t1(1),t2(2),t3;
t3=t1+t2;
std::cout<<t3.a;
return 0;
}

(2)重载为类的友元函数

main.cpp同上,Test.cpp如下

class Test
{
public:
Test(void):a(0){};
~Test(void){}; Test(int _a):a(_a){}; friend Test operator + (Test& _test1,Test& _test2)//重载为友元函数,因为友元函数不是类成员,所以需要传入2个参数
{
int new_a=_test1.a+_test2.a;
Test new_Test(new_a);
return new_Test;
}; int a;
};

[置顶] C++基础之六:运算符的重载的更多相关文章

  1. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  2. [置顶] 蓝牙基础知识进阶——Physical channel

    从本篇文章开始,晓东将会和大家一起来学习一些蓝牙的比较高阶的基础知识. 二.物理通道 物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了.     Q1:物理通道有哪些类型 物理通道 ...

  3. [置顶] Java基础学习总结(34)——HTTP协议详解

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  4. [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)

    operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...

  5. C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)

    运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...

  6. C++基础之自增和自减运算符的重载

    1. 格式 1.1 分为前置和后置格式: int x = 0; int y = 0; // 后置自增运算符 x++; // 前置自增运算符 ++x; // 后置自减运算符 y--; // 前置自减运算 ...

  7. C++_基础_运算符重载

    内容: (1)输入输出运算符重载 (2)友元类和友元函数 (3)双目运算符重载 (4)单目运算符重载 (5)不能被重载的运算符 (6)只能定义为成员形式的运算符 1.输入输出运算符重载如: int n ...

  8. [置顶]VC2013的一个bug

    [置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...

  9. 窗口置顶 - 仿TopWind

    前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...

随机推荐

  1. 无法下载图片 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file

    刚学线程通信,提示: 2016-01-27 11:11:02.246 20-9 gcd3 communicationOfThread[5193:298643] App Transport Securi ...

  2. SSDT表详解

    SSDT(system service dispatch table) 系统服务分派表 SSPT(system service parameter table) 系统服务参数表 #pragma pac ...

  3. jquery解决onmouseover和onmouseout合用的bug问题

    经常会遇到鼠标放到一个元素上显示另外一个元素,这两个元素是父子关系,比如在A上绑定mouseover和mouseout事件来显示或隐藏B元素,A元素包含B元素,当鼠标移到B元素后浏览器认为你移开了A, ...

  4. ecside入门

    ECSide是有一个基于jsp tag的开源列表组件. 简单的说,它就是一组可以帮助你快速实现强大的列表的jsp标签. 它的工作原理很简单. 您将要展现的列表的数据集合(Collection),放入r ...

  5. linux mail 简操作

    1. 如何查看linux的mailqueue 检查所传送的电子邮件是否送出,或滞留在邮件服务器中 语法:/usr/lib/sendmail -bp 2. 如何发送mail 1)将文件当做电子邮件的内容 ...

  6. Oracle EBS-SQL (BOM-7):检查有BOM无工艺路线的子装配件或成品.sql

    select     msi.segment1,     msi.description,     msi.item_typefrom inv.mtl_system_items_b   msiwher ...

  7. 转: HTML5新特性之Mutation Observer

    转: HTML5新特性之Mutation Observer Mutation Observer是什么 Mutation Observer(变动观察器)是监视DOM变动的接口.当DOM对象树发生任何变动 ...

  8. Windows 7的系统还原,你用了吗?

    在Windows XP时代可能人们最常用的系统还原工具就是Ghost,一来因为Ghost的还原非常彻底,二来由于备份Windows XP所占用的硬盘空间并不是很大,所以习惯于安装完操作系统以后就把系统 ...

  9. 关于ajax中async参数的感悟

    async,这个参数默认为true. 就是异步去处理信息. 当把它设置为false的时候,就是同步去处理数据了. var current_lead_id = '<?php echo $curre ...

  10. Codeforces 707D Persistent Bookcase(时间树)

    [题目链接] http://codeforces.com/problemset/problem/707/D [题目大意] 给出一个矩阵,要求满足如下操作,单个位置x|=1或者x&=0,一行的数 ...