Complex operator+(Complex &c2)
{ Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
//+是双目运算符,函数重载中只有一个参数,实际上运算符重载函数有两个参数,是由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this
//指针隐士的访问对象成员函数。
Complex operator+(Complex *this,Complex &c2)
{return Complex(this->real+c2.real,this->imag+c2.imag);}
//运算符重载函数可以作为类的成员函数,还可以作为非成员函数。例:
#include<iostream>
using namespace std;
class Complex
{
public:Complex(){real=0;imag=0;}Complex(int r,int i){real=r;imag=i;}void display();friend Complex operator+(Complex &c1,Complex &c2);//将运算符在Complex类中的成员函数 改为类的友元函数,应同时将运算符函数参数改为两个因为,this隐试指针只对类的成员函数有作用private:int real;int imag;};
Complex operator+(Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}//Complex 保证返回值类型和该对象类型一致
void Complex::display()
{cout<<"("<<real<<','<<imag<<"i)"<<endl;
}
int main()
{Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1=";c1.display();cout<<"c2";c2.display();cout<<"c1+c2=";c3.display();return 0;
}
//什么时候用成员函数方式,什么时候用友元函数?
//如果将运算符作为成员函数,它可以通过this指针自由的访问本类的数据成员,因此可以少写一个函数的参数。但是必须要求运算表达试第一个参数(即运算符的左操作数)是类的对象。
如果将一个复数和一个整数相加,(c1+i)可以将运算符重载函数作为类成员函数:Complex Complex::operator+(int &i)
return (Complex(real+i,imag);}
//注意在表达式中重载的运算符,+左侧应为Complex类的对象,如c3=c2+i;不能写成c3=i+c2;//如果运算符左侧的操作对象属于C++标准类型(如int)或其他类的对象,则运算符重载函数不能作为成员函数,如果函数还必须要访问类的私有成员,则必须声明为友元函数
friend Complex operator+(int &i,Complex &c)//第一个参数可以不是类对象
//在类外定义友元函数
Complex operator+(int &i,Complex &c)
{return Complex(i+c.real,c.imag);}

//C++规定,有的运算符(如赋值运算符= 、下标运算符[] 、函数调用运算符() 、 ->、new、delete )必须定义为类的成员函数,有的运算符则不能定义为类的成员函数(如流插入“<<”和流提取运算符“>>”、类型转换运算符)。

10.2 运算符重载函数作为类成员函数和友元函数相关推荐

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

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

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

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

  3. C++(16)--运算符重载(自定义Integer类)

    运算符重载 1.运算符重载--重点 2.友元函数--难点(流运算符重载) <老九学堂C++课程><C++ primer>学习笔记.<老九学堂C++课程>详情请到B站 ...

  4. 将类的成员函数作为回调函数(外一篇:友元函数)

    转自:http://blog.csdn.net/xylary/article/details/1548596 将类成员函数用做C回调函数 提出问题:  回调函数是基于C编程的Windows SDK的技 ...

  5. 当类模板遇到了友元函数

    在我学习数据结构的时候,选用了<数据结构(用面向对象方法与C++语言描述)>殷人昆 编著 这本教材.这本书代码较老有一些错误,好多是无法直接在新版本编译器下实现的. 当时我C++模板学的不 ...

  6. 深入篇【C++】类与对象:友元函数与友元类

    深入篇[C++]类与对象:友元函数与友元类 ①.提出问题:重载operator<< ②.解决问题:友元 Ⅰ.友元函数 [特点] Ⅱ.友元类 [特点] ③.总结问题 ①.提出问题:重载ope ...

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

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

  8. C++ 函数指针 类成员函数指针

    一.函数指针 函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址. 1.函数 ...

  9. c++ 线程函数(类成员函数作为线程函数使用)

    C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该类的对象.函数体可以通过显示调用该指针或直接访问类内成员. 回调函数是通过指针调用的函数,最常使用的回调函数就是在创建线 ...

最新文章

  1. FIR滤波器的Matlab实现
  2. 024_Progress进度条
  3. Cpp 11 / override 和 final 区别
  4. MATLAB离散一维小波函数
  5. Luogu2439 [SDOI2005]阶梯教室设备利用 (动态规划)
  6. 内联元素(display:inline-block)注意事项
  7. 白帽SQL注入实战过程记录(2)——根据information_schema组装SQL注入语句
  8. 如何枚举String类型的枚举?
  9. 具体数学-第11课(Stern-Brocot树和同余关系)
  10. 数据库不存在 php报错,在php中需要用到的mysql数据库的简单操作,phpmysql
  11. goeasy连接初始化,vue
  12. JAVA对接SAP接口使用sapjco3的见解
  13. 微软官方地址下载sql 2000简体中文企业版(含SP3 SP4 下载地址)
  14. Android 8.1user版本默认开启开发者模式
  15. 微信小程序:蓝牙通讯,搜索、发送与接收
  16. 前端可视化——Canvas
  17. 研电赛项目之双目测距,涉及matlab相机标定,opencv多线程编程,摄像头读取,行人检测、BM立体匹配等等
  18. vue : 无法加载文件 C:\Users\lenovo\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。解决方法
  19. HTML5期末大作业:电商网站设计——仿淘宝电商网站管理系统21页(含毕业设计论文7500字) HTML+CSS+JavaScript
  20. 丘成桐大学生数学竞赛数学物理

热门文章

  1. 一位ACMer过来人的心得【转】
  2. C# 结构体与类的区别
  3. android6.0单独编译和调试framework源码的方法
  4. LCD正向扫描和反向扫描
  5. 项目管理概述学习记录(一)
  6. WINCE---内核(kernel)---内存架构(memory archtitecture)学习
  7. WINCE6.0+S3C6410下的DM9000A驱动
  8. SpringBoot使用RabbitMQ消息队列
  9. 第二课unit11 系统恢复技术
  10. 转:开火,移动-大神Joel 也浮躁