从零开始的C++(操作符函数重载)

一、操作符函数重载

什么是操作符函数:在C++中针对类类型的对象的运算符,由于它们肯定不支持真正的运算操作,因此编译器会将它们翻译成函数,这种就叫作操作符函数(运算符函数)。

编译器把运算翻译成运算符函数,可以针对自定义的类类型设计它独有的运算功能。

其实各种运算已经具备一些功能,再次实现它的就是叫作运算符重载。

  • 双目运算符:
    a+b
    成员函数
    a.operator+(b);
    全局函数
    operator+(a,b);
  • 单目运算符:
    !a
    成员函数
    a.operator!(void);
    全局函数
    operator!(a);

二、双目操作符函数重载

成员函数:
const 类 operator#(const 类& that) const
{
return 类(参数#参数);
}

注意:双目录运算符的运算结果是个右值,返回值应该加 const,然后为了const对象能够调用参数应写 const,函数也应该具备 const 属性。

全局函数:
const 类 operator#(const 类& a,const 类& b)
{

}
注意:全局函数不是函数,可能会访问类的私有成员,解决这种问题可以把函数声明为类的友元函数(友元不是成员)。

友元:在类的外部某个函数中想访问类的私有成员(public/protected/private)时,需要所在的函数声明为友元,但友元只是朋友,因此它只有访问权,没有实际的拥有权(其根本原因是它没 this 指针)。

友元声明:把函数的声明写一份到类中,然后在声明前加上 friend 关键字,使用友元既可把操作符函数定义为全局的,也可以确保类的封装性。。

注意:友元函数与成员函数不会构成重载关系,因为它们不在同一个作用域内。

三、赋值类型的双目操作符

1、获取单参构造成赋值运算的调用方式。
String str = “sunll”; // 会调用单参构造,而不调用赋值运算符
str = “hehe”;

2、左操作数据不能具有 const 属性
1、成员函数不能是常函数
2、全局函数第一个参数不能有 const 属性
3、返回值应该都(成员/全局)具备 const 属性。

四、单目操作符函数重载

成员
const 类 operator#(void)
{

	}

全局
const 类 operator#(const 类& that)
{

	}

猜你喜欢

转载自blog.csdn.net/weixin_45050225/article/details/99694943
今日推荐