运算符重载是一种特殊的函数重载,即把运算符当做函数名进行重载
运算符重载是对已有的运算符使用范围进行扩展,使运算符在保持原功能的情况下,可以对更多的数据类型操作起作用
例如:一个Date类,声明a,b两个对象,执行 a - b 会报错,但是重载 “-”后就能实现对象的相减
C++预定义中的运算符的作用对象只局限于那些基本数据类型,如int + int ,int + float 等等
返回值类型 operator运算符名称(形参列表)
{
函数体
}
重载 “+” 实现对象的相加
#include
#include
#include
using namespace std;
class Complex {
private:
double m_real;
double m_image;
public:
Complex():m_image(0.0),m_real(0.0) { //重载之前要对成员变量赋初值
}
Complex(double real,double image) {
m_real = real;
m_image = image;
}
Complex operator+(Complex &A) { //重载
Complex B;
B.m_image = this -> m_image + A.m_image; //1
B.m_real = this -> m_real + A.m_real; //2
return B;
}
//还可以写成更简单的形式(去掉 1 , 2):
//return Complex(this -> m_image + A.m_image,this -> m_real + A.m_real);
void Disp() const {
cout<
过程:执行时,编译器检测到 “+”号(+ 具有左结合性)左边是一个Complex对象,就会调用成员函数operator+(),也就是c1+c2,实质上是 “c1.operator+(c2);” 这是标准的函数调用形式。 (c1是要调用的函数的对象,c2是函数的实参,operator+ 是函数名)
#include
#include
#include
using namespace std;
class Complex {
private:
double m_real;
double m_image;
public:
Complex():m_image(0.0),m_real(0.0) {
}
Complex(double real,double image) {
m_real = real;
m_image = image;
}
friend Complex operator+(Complex &A , Complex &B) { //重载
return Complex(A.m_image + B.m_image,A.m_real + B.m_real);
}
void Disp() const {
cout<
双目算术运算符 | +,-,*,/,% |
---|---|
关系运算符 | ==,!=,<,>,<=,>= |
逻辑运算符 | !,||,&& |
单目运算符 | +,-,*(指针),& |
自增自减运算符 | ++,– |
位运算符 | |,&,~,^,<<,>> |
赋值运算符 | =,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>= |
空间申请与释放 | new, delete ,new[] ,delete[] |
其他运算符 | ()(函数调用),->(成员访问),->*(成员指针访问),,(逗号),[](下标) |
成员访问运算符 | . |
---|---|
成员指针访问运算符 | * |
域运算符 | :: |
长度运算符 | sizeof |
条件运算符 | ?: |