首页 > 其他 > 详细

5.运算符重载

时间:2020-06-13 15:54:51      阅读:51      评论:0      收藏:0      [点我收藏+]

一.概述

1.运算符

  ·运算符就是具备特殊功能的符号

  ·运算符本质上就是一个函数

2.运算符重载

  ·运算符重载的本质,就是在对象(类)中重载运算符函数

 

二.实现方式

1.定义运算符重载函数

  1-1 名词说明

    ·左值与右值:简单来说,以赋值符号"="划分,在"="左边的就是左值,在"="右边的就是右值

    ·关键字:operator

  1-2 运算符重载函数的定义

    //FenShu是我定义的一个分数类

    ·举例:FenShu& operator+(const FenShu& fs) {  /*函数体*/ };

    ·返回值:表达式的返回值,也就是最终的结果

    ·函数名:关键字加上运算符名(operator+)

    ·参数:操作数,也就是左值与右值

    ·函数体:重载后的运算符的具体实现

2.运算符重载的两种方式

  2-1 重载运算符函数为类的成员函数

    ·当前对象(也就是this)为运算符的左值

    ·举例:FenShu operator+(const FenShu& fs);

  2-2 重载运算符函数为类的友元(缘)函数

    ·友元函数不是类的成员变量

    ·友元函数中可以访问成员变量

    ·第一个参数为左值,第二个参数为右值

    ·举例:FenShu& operator+(const FenShu& fs1,const FenShu& fs2);

 

三.语法与规范

1.语法

  ·".(点运算符)"、"->(箭头运算符)"、"::(作用域运算符)"、"?:)"、"sizeof关键字"、"&(取地址)",除了这些,其他的运算符基本都能重载

  ·不能创建新的运算符,比如重载一个不存在的运算符

  ·遵循函数重载原则

2.规范

  ·双目运算符一般重载为友缘函数,单目运算符一般重载为成员函数

  ·不能修改运算符的规则:优先级、操作数个数、操作数类型

  ·重载后的运算符应与原运算符功能相同

 

四.重载时需注意的几个运算符

1.赋值运算符与拷贝构造的区别

  ·根据对象是否存在来判断,在构造对象时调用拷贝构造

FenShu fs1;
Fenshu fs2 = fs1;    //此时调用的是拷贝构造,还是赋值运算符

//答案是拷贝构造
//因为对象fs2不存在,所以要构造出对象,而此时给了一个fs1的对象,来当做参数,故这里调用了拷贝构造

2.输入输出运算符

  ·只能重载为友缘

  ·注意连用问题

  ·传入值是否改变,是否用const修饰

3.new与delete的重载动机

  ·内存泄漏:申请了内存但是没有及时释放

  ·手动内存分配需要注意内存泄漏问题,帮助排查内存泄漏

 

5.运算符重载

原文:https://www.cnblogs.com/Basics/p/13113593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!