运算符的两种重载--C++

在上一篇文章中,我介绍了运算符重载的特点,这篇就说说运算符重载的实现


重载为类的成员函数

将运算符重载为它将要操作的类的成员函数,成为成员运算符函数。实际使用时,总是通过该类的某个对象访问重载的运算符。一般是类内声明,类外定义。其一般形式为:

// 类内声明
<返回类型> operator<运算符>(参数表);
// 类外定义
<返回类型> <类名>::operator<运算符>(参数表)
{
	/* code */
}

双目运算符重载为成员函数

左操作数是访问该工作运算符的对象本身的数据,由this指针指出,(this指针请见我的另一篇博文)右操作数通过成员运算符的参数指出。因此,此时成员运算符函数只有一个参数,如:

class example
{
	// code
	example operator+(example obj);									// 类内声明
}

example example::operator+(example obj)
{
	/* code */												// 类外实现
}

单目运算符重载为成员函数

单目运算符重载为成员函数时,操作数是访问该重载函数的对象本身的数据,由this指针指出。所以,此时成员运算符函数没有参数,如:

class example
{
	example operator++( );									// 声明
}

重载为类的友元函数

友元运算符函数(同样类内声明,类外定义)不是类的成员,不属于任何一个对象,故没有this指针,也不需要作用域运算符。因此,重载双目运算符要有两个参数,重载单目运算符要有一个参数,其一般形式为:

friend<返回类型> operator<运算符>(参数表);
friend<返回类型> operator<运算符>(参数表)
{
	/* code */
}

提醒:

  • = ,(),[ ], -> 不能用友元函数 重载
  • 重载++, --时要采用引用来传参
  • 运算符的左操作数是一个标准数据类型而右操作数是对象的话,必须是友元函数重载,原因是标准数据类型不能产生对重载运算符的调用
  • 运算符的操作数,特别是左操作数要类型转换,必须是友元函数重载
  • 若一个运算符要修改对象的状态,成员运算符较好
  • <<,>>(输入输出运算符)必须用友元函数重载

一些特殊运算符的重载

发布了5 篇原创文章 · 获赞 3 · 访问量 282

猜你喜欢

转载自blog.csdn.net/weixin_45494811/article/details/104037187