运算符重载(一)
来源:互联网 发布:平板电脑可以做淘宝吗 编辑:程序博客网 时间:2024/05/20 07:50
运算符重载
- 运算符重载允许把标准运算符(如+、-、*、/、<、>等)应用于自定义数据类型的对象
- 直观自然,可以提高程序的可读性。体现了C++的可扩充性
- 运算符重载仅仅只是语法上的方便,它是另一种函数调用的方式
- 运算符重载,本质上是函数重载
- 不要滥用重载、因为它只是语法上的方便,所以只有在涉及的代码更容易写、尤其是更易读时才有必要重载
成员函数重载
成员函数原型的格式: 函数类型 operator 运算符(参数表)
成员函数定义的格式:函数类型 类名::operator 运算符(参数表){函数体};
//Complex.h#ifndef _COMPLEX_H_#define _COMPLEX_H_class Complex{public: Complex(int real,int imag); ~Complex(); Complex operator+ (const Complex& other); //隐藏了第一个参数是自己本身 void Display();private: int real_; int imag_;};#endif//Complex.cpp #include "Complex.h"#include<iostream>using namespace std;Complex::Complex(int real,int imag):real_(real),imag_(imag){}Complex::~Complex(){}Complex Complex::operator+ (const Complex& other) //+运算符的重载,返回的是一个实体{ int r = real_ + other.real_; int i = imag_ + other.imag_; return Complex(r,i);}void Complex::Display(){ cout <<real_<<"+"<<imag_<<"i"<<endl;}//main.cpp#include "Complex.h"#include<iostream>using namespace std;int main(void){ Complex c1(3,5); Complex c2(4,6); Complex c3 = c1 + c2; //等价于c1.operator+(c2) c1.Display(); c2.Display(); c3.Display(); return 0;}
非成员函数重载
友元函数原型的格式: friend 函数类型 operator 运算符(参数表)
友元函数定义的格式:friend 函数类型 类名::operator 运算符(参数表){函数体};
//Complex.h#ifndef _COMPLEX_H_#define _COMPLEX_H_class Complex{public: Complex(int real,int imag); ~Complex(); //Complex operator+ (const Complex& other); //隐藏了第一个参数是自己本身 friend Complex operator+ (const Complex& c1,const Complex& c2); //不再隐藏参数 void Display();private: int real_; int imag_;};#endif//Complex.cpp #include "Complex.h"#include<iostream>using namespace std;Complex::Complex(int real,int imag):real_(real),imag_(imag){}Complex::~Complex(){}Complex operator+ (const Complex& c1,const Complex& c2) //不是类体中的函数{ int r = c1.real_ + c2.real_; int i = c1.imag_ + c2.imag_; return Complex(r,i);}void Complex::Display(){ cout <<real_<<"+"<<imag_<<"i"<<endl;}
运算符重载的规则
- 运算符重载不允许发明新的运算符
- 不能改变运算符操作对象的个数
- 运算符被重载后,其优先级和结合性不会改变
- 不能重载的运算符:
5. 一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数
6. 以下一些双目运算符不能重载为类的友元函数:=、()、[]、->
7. 类型转换运算符只能以成员函数方式重载
8. 流运算符只能以友元的方式重载
0 0
- 重载运算符一
- 运算符重载(一)
- 运算符重载(一)
- 运算符重载一
- 运算符重载一
- 运算符重载练习(一)
- 运算符重载(一)
- 项目一。运算符重载
- 项目一。运算符重载
- 方法运算符重载一
- 运算符重载(一)
- C++重载运算符(一)如何重载运算符
- 十七、运算符重载(一) 成员函数重载、友元函数重载、运算符重载规则
- 再次学习c++运算符重载(一)
- 第八周任务一:运算符重载
- 黑马程序员-------运算符重载(一)
- C++中的运算符重载(一)
- 第九周-项目一运算符重载
- 递归与分治之棋盘覆盖问题
- linux下修改网卡名称
- c语言:使用for循环编写一个判断闰年的程序
- Android PinnedSectionListView异常崩溃报错
- 二分图 匈牙利算法应用
- 运算符重载(一)
- canvas基础练习(画矩形)
- OC_protocol协议介绍(2)
- STL关联容器的学习
- getDefaultDisplay().getWidth过期。
- 解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
- Linux更新出错解决方案
- iOS开发之单例模式
- Oracle管理权限和角色