博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 运算符重载
阅读量:5250 次
发布时间:2019-06-14

本文共 2545 字,大约阅读时间需要 8 分钟。

明白了函数重载后,运算符的重载就是小意思了。

但是运算符的重载在实现起来有一定的规则。

First:双目运算符

  运算符重载为成员函数形式。

  格式:类名 operator运算符(const 类名 &对象名) const{}

  具体的还是看代码吧。

  

View Code
#include "iostream"#include "cstring"#include "string"#include "cstdio"using namespace std;class Complex{public:    Complex(double r=0.0, double i=0.0):real(r),imag(i){}    Complex operator+(const Complex &c2) const{        //重载"+"        return Complex(real+c2.real, imag+c2.imag);    }    Complex operator-(const Complex &c2) const{        //重载"-"        return Complex(real-c2.real, imag-c2.imag);    }    void display(){        cout<<"("<
<<","<
<<")"<

 

Second:单目运算符

  运算符重载为成员函数形式。

  格式:类名& operator运算符(){} 或者 类名 operator运算符(int){}

  具体的还是来看代码。

View Code
#include "iostream"#include "cstring"#include "string"#include "cstdio"using namespace std;class Clock{public:    Clock(int hour=0, int minute=0, int second=0){        if(hour>=0 && hour<24 && minute>=0 && minute<60 && second>=0 && second<60){            this->hour = hour;            this->minute = minute;            this->second = second;        }else cout<<"Time Error!"<
=60){ second -= 60; minute++; if(minute>=60){ minute -= 60; hour = (hour+1)%24; } } return *this; } Clock operator++(int){ //前置++, 只要是有参的,就是前置的,注意这里没& Clock old = *this; ++(*this); return old; }private: int hour; int minute; int second;};int main(){ Clock myClock(23, 45, 56); cout<<"at first: "; myClock.showTime(); cout<<"myClock++: "; (myClock++).showTime(); cout<<"++myClock: "; (++myClock).showTime();}

 

上面所讲的都运算符重载为成员函数形式的重载,

下面来讲讲运算符重载为非成员函数形式的重载。

 

其实很简单,就只要在重载函数前面加上一个friend可以了。

但是有一点要注意:在重载为成员函数时,省去了一个参数。

那么在重载为非成员函数时,每一个参数都要传入了,不可以省。

还有一点就是要将修饰符const去掉。

好了,就这三点注意了。

再来总结一下:

  1.加friend

  2.每个参数都要传入,不能省

  3.去掉修饰符const

  下面来看一个代码吧。

View Code
#include "iostream"#include "cstring"#include "string"#include "cstdio"using namespace std;class Complex{public:    Complex(double r=0.0, double i=0.0):real(r),imag(i){}    friend Complex operator+(const Complex &c1, const Complex &c2) {        //重载"+"        return Complex(c1.real+c2.real, c1.imag+c2.imag);    }    friend Complex operator-(const Complex &c1,const Complex &c2) {        //重载"-"        return Complex(c1.real-c2.real, c1.imag-c2.imag);    }    void display(){        cout<<"("<
<<","<
<<")"<

 

转载于:https://www.cnblogs.com/o8le/archive/2012/04/21/2462227.html

你可能感兴趣的文章
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
HTML5与CSS3基础(五)
查看>>
WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
查看>>
linux脚本中有source相关命令时的注意事项
查看>>
css样式表中的样式覆盖顺序
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
REST Web 服务(二)----JAX-RS 介绍
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>