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

1.概述

什么是运算符重载?

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

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

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

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

2.实现

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

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

  1. <函数类型> operator <运算符>(<形参表>)
  2. {
  3. <函数体>;
  4. }

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

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

3.示例

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

Test.h

  1. class Test
  2. {
  3. public:
  4. Test(void):a(0){};
  5. ~Test(void){};
  6.  
  7. Test(int _a):a(_a){};
  8.  
  9. Test operator + (Test& _test)//重载操作符,返回该类的一个实例
  10. {
  11. int new_a=a+_test.a;
  12. Test new_Test(new_a);
  13. return new_Test;
  14. };
  15.  
  16. int a;
  17. };

main.cpp

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

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

main.cpp同上,Test.cpp如下

  1. class Test
  2. {
  3. public:
  4. Test(void):a(0){};
  5. ~Test(void){};
  6.  
  7. Test(int _a):a(_a){};
  8.  
  9. friend Test operator + (Test& _test1,Test& _test2)//重载为友元函数,因为友元函数不是类成员,所以需要传入2个参数
  10. {
  11. int new_a=_test1.a+_test2.a;
  12. Test new_Test(new_a);
  13. return new_Test;
  14. };
  15.  
  16. int a;
  17. };

[置顶] 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. BOOST_PP_INC_I(x)实现

    这个比较有意思,# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x 连接在一起以后,然后定义为x+1 实现了inc功能,不过最多也就到255 # /* Copy ...

  2. perl 递归地遍历目录下的文件

    #!/usr/bin/perl -w use strict; use File::Spec; local $\ ="\n";#当前模块的每行输出加入换行符 my %options; ...

  3. Linux学习之lsof命令

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 ...

  4. 【JQ成长笔记】jQuery cookie的使用

    jquery cookie挺好用的.简单实在.菜鸟都能用得上..额.文笔不好不好..咳咳.. 先来看看jq.cookie的aip 写入cookie $.cookie("this-cookie ...

  5. submit与onsubmit(转)

    发生顺序:onsubmit -> submit 1.阻止表单提单: <script>function submitFun(){    //逻辑判断    return true; / ...

  6. css3 transform 变形

    在css3中,用transform可以实现文字或图像的旋转.缩放.倾斜和移动,并且该元素下的所有子元素,随着父元素一样转.缩放.倾斜和移动. transform属性 transform的属性包括:ro ...

  7. 如何解决”无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。“

    字段Time在数据库中为datetime类型 dr.GetString(3).ToString() dr.GetString(3).ToString() => dr.GetDateTime(3) ...

  8. HTML5学习笔记之Input类型

    Input类型——email email类型用于包含email地址的输入域,在输入地址时会自动验证email域的值 例:Email:<input type="email" n ...

  9. sim卡中的汉字存储格式

    Sim卡中的ucs2格式 Sim卡中的中文都是以ucs2格式存储的,ucs2和unicode只是字节序不同,unicode是小头在前,ucs2是大头在前. Ucs2与GB2312互换可以用VC中的Wi ...

  10. rsyslog start with

    startswith Checks if the value is found exactly at the beginning of the property value. For example, ...