各种重载可能遇到的问题

	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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值