- 为了使用系统的运算符对自定义类对象进行操作(如+ -)
- 运算符重载是将运算符重载为一种特殊的函数,函数名是operator后的运算符符号
-
既然是一种函数,也有返回值和参数表
定义成非成员函数(普通的全局函数)
运算符重载复数加 +
inline complex operator+(const complex& x, const complex& y)
{
return complex(x.real()+y.real(),
x.imag()+y.imag());
}
在类外定义的 + 运算符重载
- 有两个参数,通过函数取得私有数据并且加在一起
- 返回值中,创建临时对象,并赋值返回
- 临时对象:在求解表达式的时候,如果需要一个地方存储其运算结果,编译器会创建一个没命名的对象,这就是临时对象。C++程序员通常用temporary这个术语来代替temporary object。
运算符重载复数IO <<
#include <iostream>
using namespace std;
ostream& operator<< (ostream& os,const complex& x)
{
return os << '(' << x.real() << ',' << x.imag() << ')';
}
- c++对内置的各种类都重载了<<流操作,用户自定义的类必须手动重载
- << 的重载只能是全局的
- 返回值也是ostream类型为了连续<< :
cout << complex1<<complex2
定义成成员函数
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
做成员函数的运算符重载
- 做成员函数时,运算符重载 + 只有一个参数,又因为+是个二元运算符,另一个参数其实是定义这个运算符重载的类的this指针。
网友评论