Complex operator +(const Complex& p)
Complex operator -(const Complex& p)
Complex operator *(const Complex& p)
Complex operator /(const Complex& p)
bool operator ==(const Complex& p)
bool operator !=(const Complex& p)
Complex& operator =(const Complex& p) //重载赋值操作符的函数参数必须是 const 引用
int& operator[](int i) //重载数组访问操作符([ ]),我们不能对左值进行修改,因为函数调用的返回值不能作为左值使用,所以我们把函数返回的类型改成引用
int operator()() //重载函数调用操作符 ()
1、可以将操作符重载函数定义为类的成员函数,也可以重载为全局函数版本的重载函数。
比全局操作符重载函数少一个参数(左操作数)。编译器优先在成员函数中寻找操作符重载函数,一旦找到,就不用调用全局函数版本的重载函数。
2、C++ 规定赋值操作符(=)只能重载为成员函数
3、数组访问操作符([ ])只能通过类的成员函数重载,重载函数能且只能使用一个参数,可以定义不同参数的多个重载函数
int& operator[](int i)
{
return a[i];
}
int& operator[](const string& s)
{
if (s == "1st")
{
return a[0];
}
else if (s == "2nd")
{
return a[1];
}
else if (s == "3rd")
{
return a[2];
}
else if (s == "4th")
{
return a[3];
}
else if (s == "5th")
{
return a[4];
}
return a[0];
}
4、函数调用操作符 () 是可以重载的,函数调用操作符只能通过类的成员函数重载
#include <iostream>
#include <string>
using namespace std;
class Fib
{
private:
int a0;
int a1;
public:
Fib()
{
a0 = 0;
a1 = 1;
}
Fib(int v)
{
a0 = 0;
a1 = 1;
for (int i = 2; i <= v; i++)
{
int t = a1;
a1 = a0 + a1;
a0 = t;
}
}
int operator()()
{
int ret = a1;
a1 = a0 + a1;
a0 = ret;
return ret;
}
};
int main()
{
Fib fib;
for (int i = 0; i < 10; i++)
{
cout << fib() << endl;
}
cout << endl;
for (int i = 0; i < 5; i++)
{
cout << fib() << endl;
}
cout << endl;
Fib fib2(5);
for (int i = 0; i < 5; i++)
{
cout << fib2() << endl;
}
return 0;
}
5、重载指针特征操作符(->
和 *
), 只能通过类的成员函数重载, 重载函数不能使用参数,只能定义一个重载函数
Test* operator->()
{
return mp;
}
Test& operator*()
{
return *mp;
}