运算符重载为非成员函数的规则:

  • 函数的形参代表依自左至右次序排列的各操作数
  • 重载为非成员函数时
  • 参数个数 = 原操作数个数(后置++、--除外,它们仍然为了区分前置++、--要强行加个int)
  • 至少应该有一个自定义类型的参数(例如"Typ1 operator + (int, double)"非法)
  • 如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元

运算符重载为非成员函数的使用方法:

  • 重载双目运算符U:oprd1 U oprd2 = operator U (oprd1, oprd2)
  • 前置单目运算符U:U oprd = operator U(oprd)
  • 后置单目运算符U:oprd U = operator U(oprd, 0)

例子:重载负数的加减法以及"<<"运算符:

  • 将+、-重载为非成员函数,并将其声明为复数类的友元,两个操作数都是复数类的常引用
  • 将<<(双目运算符)重载为非成员函数,并将其声明为复数类的友元,它的左操作数是std::ostream引用,右操作数为复数类的常引用,返回std::ostream引用
#include<iostream>
using namespace std;
class Complex
{public:Complex(double r = 0.0, double i = 0.0):  r(r),  i(i)  {}  friend Complex operator + (const Complex &c1, const Complex &c2);friend Complex operator - (const Complex &c1, const Complex &c2);friend ostream &operator << (ostream &out, const Complex &c);private:    double r;double i;
};Complex operator + (const Complex &c1, const Complex &c2)
{return Complex(c1.r+c2.r, c1.i+c2.i);
}
Complex operator - (const Complex &c1, const Complex &c2)
{return Complex(c1.r-c2.r, c1.i-c2.i);
}
ostream &operator << (ostream &out, const Complex &c)
{out<<"("<<c.r<<", "<<c.i<<")";return out;
}int main(void)
{    Complex c1(5, 4), c2(2, 10), c3;c3 = c1 - c2;cout<<"c3 = c1 - c2 = "<<c3<< endl;c3 = c1 + c2;cout<<"c3 = c1 + c2 = "<<c3<< endl;return 0;
}

运算符重载的非成员函数形式相关推荐

  1. C++ 复数类加减法运算重载为成员函数形式

    运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数.运算符重载为类的成员函数的一般语法形式为: 返回类型 operator 运算符(形参表){函数体 } 运算符重载为非成员函数的一般 ...

  2. (P22)运算符重载:运算符重载 ,成员函数重载 ,非成员函数重载 ,运算符重载规则

    文章目录 1.运算符重载 2.成员函数重载 3.非成员函数重载 4.运算符重载规则 1.运算符重载 运算符重载允许把标准运算符(如+.-.*./.<.>等)应用于自定义数据类型的对象 直观 ...

  3. C++运算符重载(友元函数方式)

    我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...

  4. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

  5. C++运算符重载(成员函数方式)

    一.运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.如果将C++中这些现存的运算符直接作用于用户自定义的类型数据上,会得到什么样 ...

  6. C++学习笔记(10)运算符重载,友元函数,友元类

    c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...

  7. C++ 运算符重载和类型转换函数

    C++中对于用户自定义类对象的运算,要进行重载操作.如 class overload{public:... private:int num; }; overload o1, o2; int num; ...

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

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

  9. 【C++---06】实验报告: 运算符重载和虚函数

    内容提要 对于类MyString,要求重载'+'运算符后可以计算表达式:a=b+c;表示两个字符串连接. 其中a,b,c都是类MyString的对象. 使用虚函数编写程序求球体和圆柱体的体积及表面积. ...

最新文章

  1. react native redux 梳理
  2. Scala模式匹配:对列表进行匹配
  3. python中max函数用法_Python中max函数用法实例分析
  4. java8 内部类_Java8基础知识(五)内部类
  5. “中国开发者大调查”问卷收集即将结束,快来看这次中奖“末班车”你赶上了吗?
  6. HDU1434 幸福列车【模拟+优先队列】
  7. 在ASP.NET中使用ObjectDataSource数据控件和GridView显示数据(2)
  8. Julia : csv =hdf5
  9. turtle库绘图:绘制QQ所有表情
  10. SparkStreaming----复习
  11. Mac无法连接wifi和手机热点 解决方法
  12. 深度学习 回声消除 AEC
  13. Treeview 无限分类非递归终极解决方案VB
  14. WeChat楼梯导航
  15. CRUSH算法 - 可控、可伸缩、分布式地归置多副本数据
  16. python中常用的模块(cleandar模块,time模块,datetime模块,OS模块,shutil()模块,random模块)
  17. RGB TO ARGB
  18. R语言 根据变量包含某些字符,生成新变量
  19. 在线免费无限制的 PDF 处理工具(转换、编辑、分割、合并、压缩)
  20. 半导体物理 第七章 金属半导体接触及其能级图

热门文章

  1. 专科python应届生工资多少-请问学过一点python,应届生怎么找工作?
  2. python软件下载安装中文版-pathon软件下载 python官方中文版3.6.0
  3. python函数定义及调用-Python函数的基本定义和调用以及内置函数
  4. python入门基础知识实例-Python入门,原来如此简单!
  5. 现在有什么开源的语音识别吗?
  6. win10wifi多了数字_win10系统电脑查看wifi密码是多少的方法
  7. php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串
  8. Vue中this.$router.replace和this.$router.push的区别
  9. android toast 自定义时间,android自定义Toast设定显示时间
  10. 大字段 CLOB/BOLB与String互转