一元运算符

首先明白什么是一元,二元和多元运算符,比如++a、b--属于一元运算符,因为参与运算的参数只有一个,以此类推二元运算符就是参与运算的参数有两个,比如a+b。

一元运算符可以表示为:Object op\op Object

重载为成员函数为:Object.operator op(),操作数有对象Object通过this指针隐含传递。

重载为友元函数为:operator op(Object),操作数由参数表的参数Object提供。

再开始分析自增,自减操作符时,我们要理解:

前置自增、自减是参数先自增、自减运算完之后再使用(先运算,再使用)

后置自增、自减是参数先使用再自增、自减(先使用,再运算)

重载前置++和前置--操作符

全局函数

Complex &operator++(Complex &c)
{c.m_a++;c.m_b++;return c;
}int main()
{Complex c(1, 2);++c;c.PrintVal();system("pause");return 0;
}

成员函数

class Complex
{Complex &operator--(){this->m_a--;this->m_b--;return *this;}
};int main()
{Complex c(1, 2);--c;c.PrintVal();system("pause");return 0;
}

重载后置++和后置--操作符

全局函数

Complex operator++(Complex &c,int)
{Complex temp = c;c.m_a++;c.m_b++;return temp;
}int main()
{Complex c(1, 2);c++;c.PrintVal();system("pause");return 0;
}

成员函数

class Complex
{Complex operator++(int){Complex temp = *this;this->m_a++;this->m_b++;return temp;}
};int main()
{Complex c(1, 2);c++;c.PrintVal();system("pause");return 0;
}

对于下面参数中的int,是一个占位符,作用是与前置++,前置--相区别。编译器区分用的。

Complex& operator++(Complex &c,int)
Complex &operator++(int)

运算符重载过程

1、首先承认操作符重载是一个函数,定义函数名operator++

2、分析函数参数,根据左右操作数的个数 operator++(Complex &c)

3、分析函数返回值,函数返回值充当左值 需要返回一个引用。

友元函数和成员函数选择

1.、当无法修改左操作数的类时,使用全局函数进行重载

2、=、[]、()和->操作符只能通过成员函数进行重载

3、类成员函数方法无法实现 << 操作符重载

无法修改左操作数的类时,怎么理解?意思就是说我们无法修改ostream和istream类,只能通过全局函数进行重载,

用友元函数重载<<、>>操作符

  • istream 和 ostream 是 C++ 的预定义流类
  • cin 是 istream 的对象,cout 是 ostream 的对象
  • 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
  • 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据
  • 用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型

用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型

friend ostream& operator<<(ostream &out, Complex &c)
friend istream& operator>>(istream &in, Complex &c)

注:函数返回值充当左值 需要返回一个引用

友元函数重载操作符使用注意点

1.友员函数重载运算符常用于运算符的左右操作数类型不同的情况

2.在第一个参数需要隐式转换的情况下,使用友元函数重载

3.友元函数没有this指针,所需操作数都必须在参数表中显示声明,很容易实现类型的隐式转换

用成员函数和友元函数重载运算符相关推荐

  1. C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...

  2. 运算符重载为成员函数,友元函数

    重载运算符是函数重载的一种, 针对类对象进行操作,重载的函数中至少有一个是类对象 int operator +(ass numone, int num){...} 重载为类的成员函数, 单目运算符重载 ...

  3. C++运算符重载函数作为友元函数

    运算符重载函数作为友元函数 在前面的程序例子中对运算符"+"进行了重载,使之能用于两个字符串的相加.在该例中运算符重载函数 operator +(); 作为 my_string类中 ...

  4. 第七周项目一-成员函数、友元函数和一般函数有区别(1)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...

  5. 采用成员函数和友元函数计算给定两个坐标点之间的距离

    设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离 ...

  6. java 友元函数_C++ 友元函数用法总结

    C++中的友元机制允许类的非公有成员被一个类或者函数访问,友元按类型分为三种: 普通非类成员函数作为友元.类的成员函数作为友元.类作为友元. 1.友元的内容 友元包括友元的声明以及友元的定义.友元的声 ...

  7. 10.2 运算符重载函数作为类成员函数和友元函数

    Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...

  8. C++运算符重载函数作为类成员函数和友元函数

    C++运算符重载函数作为类成员函数 1.1成员函数的重载运算符左侧是一个类对象,而且与运算符函数类型相同. 因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数和返回值类型相同,运算结果才 ...

  9. 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

    1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std;clas ...

最新文章

  1. 嵌入式linux文件系统格式,嵌入式Linux的文件系统分区及数据读写方法与流程
  2. matlab画平行坐标轴的直线
  3. PMP-【第6章 项目进度管理】-2021-2-11(136页-160页)
  4. Qt QDialog将窗体变为顶层窗体(activateWindow(); 和 raise() )
  5. Scrum项目1.0
  6. 谷歌Chrome 11对早期开发者开放使用
  7. Leetcode--3Sum
  8. MySQL str_to_date()函数
  9. 软件外包相关职业规划
  10. C++ Primer Plus学习(七)——函数简介
  11. tomcat 开启 https 使用apr
  12. Java 如何使用protobuf
  13. 《剑指offer》面试题24——二叉搜索树的后序遍历序列(C++)
  14. 《深入浅出Python机器学习》读书笔记 第一章 概述
  15. python 网页上显示数据_Python实战【第二节】在网页上显示信息
  16. php公网不能访问8080,linux启动tomcat外部浏览器不能访问8080端口解决方案
  17. 程序设计方法学作业—三天打渔两天晒网程序设计
  18. chrome无法打开任何网站提示证书过期
  19. Reac16+Monaco打造代码编辑器(前端部分)
  20. 热敏电阻VS模拟温度传感器

热门文章

  1. psv 进php,php - 使用htaccess将网站http重定向到lapsvel中的https - SO中文参考 - www.soinside.com...
  2. 杂谈之Java命名规范与注释
  3. C++ STL源码分析——一个万用的 hash function
  4. 我的第三本译作《机器学习即服务》上架啦
  5. 我的第二本译作《精通OpenStack》上架啦:书籍介绍和译者序
  6. PNAS:快速脑电波振荡识别并定位癫痫患者的大脑
  7. mysql传入Bean_ods数据导入mysql
  8. 车载大屏仪表用什么软件开发的
  9. 【必看】分析各大招聘网站
  10. 安卓Android系统超级终端命令行大全