运算符重载

运算符重载为类的成员函数形式:

1,重载为类的成员函数(函数的参数比原来的运算数个数少一个,++,--例外):

               函数类型 operator 运算符(形参表){函数体}

2,重载为类的友元函数(参数个数与元运算数的个数相同):

              friend 函数类型 operator 运算符(形参表) {函数体}

注:   单目运算符最好重载为成员函数,而双目运算符最好重载为友元函数.

重载单目运算符:

1,重载++,--:

前缀格式:  函数类型 operator ++() {…; return …;}  //再查查            ++A

后缀格式:  函数类型 operator ++(int)  {…; return …;} //B++

2,重载->单目运算符:“->”运算符是成员访问运算符,只能被重载为成员函数

1,

形式:   数据类型 类名::operator –>();

例子:

#include <iostream>
using namespace std;
class Myclass
{
    int n;
public:
    Myclass(int x){n=x;}
    Myclass *operator ->(){return this;}
    void display(){cout<<"N="<<n<<endl;}
};
int main()
{
    Myclass s(10);
    s->display();
    s.display();
    return 0;
}

 

重载双目运算符为成员函数:具有this指针.

Myclass Myclass::operator+(const Myclass &s)      //&的含义?
{
	char str[Max];
	strcpy(str,name);
	strcat(str,s.name);
	return Myclass(str);
}

重载双目运算符为友元函数:

无this指针.

格式:   friend 类名 operator 运算符(形参1,形参2);

 

重载比较运算符:

必须返回true(非0)或false(0).

<  >   ==

格式:  bool operator <(const …);

重载赋值运算符:

 1,重载运算符”+=”和”-=”:

格式:   类名 operator +=(形参表);

注:  重载运算符运算符”+=”和”-=”不会改变左边变量的值.

 

 2,重载运算符”=”:

系统会自动生成复制对象的的赋值运算符,但其有缺陷,如果对象中有指针,在调用析构函数撤消同一内存会产生运行错误.

 

“=”运算符重载为成员函数

方式一:  

 

	operator =(Myclass &s)
	{
		delete p;
		p=new char[strlen(s.p)+1];
		strcpy(p,s.p);
	}
方式二:
 
	Myclass &operator =(Myclass &s)
	{
		delete p;
		p=new char[strlen(s.p)+1];
		strcpy(p,s.p);
		return *this;
	}

当赋值运算符连用时,应使用方式2实现重载.
 
重载下标运算符:只能作为类的成员函数.可实现数组下标的越界检测等.
格式:返回值类型 operator [](形参表);
例子:
	char operator [](int n)
	{
		if (n>len-1)
		{
			cout<<"数组下标越界";
			return ' ';		//返回一个特殊字符		} 
		else
		{
			return *(str+n);
		}
	}

重载运算符new和delete:

只能被重载为类的成员函数.无论是否有static关键字,重载了的new和delete均为了的静态成员函数.

new重载格式:  void *类名::operator new(size_t,参数表);

delete重载格式: void *类名::operator delete(void *,参数表);     //释放空间前需要进行强制类型转换

重载逗号运算符:双目运算符

格式:  类名 operator , (参数表);

 

重载类型转换运算符:

格式:  operator 类型名() {函数体}

 

重载函数调用运算符:

格式: 数据类型 类名::operator ()(参数表);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值