C++之运算符重载

2021-06-06 06:03

阅读:473

标签:tor   赋值   一个   operator   load   自动   完成   个人   overload   

函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。
运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。

运算符重载格式

返回值类型 operator 运算符名称 (形参表列){
//TODO:
}

在 C++ 中进行运算符重载时,有以下问题需要注意:

  • 重载后运算符的含义应该符合原有用法习惯。例如重载+运算符,完成的功能就应该类似于做加法,在重载的+运算符中做减法是不合适的。此外,重载应尽量保留运算符原有的特性。
  • C++ 规定,运算符重载不改变运算符的优先级。
  • 以下运算符不能被重载:.、.*、::、? :、sizeof。
    重载运算符()、[]、->、或者赋值运算符=时,只能将它们重载为成员函数,不能重载为全局函数。

运算符重载的实质是将运算符重载为一个函数,使用运算符的表达式就被解释为对重载函数的调用。
运算符可以重载为全局函数。此时函数的参数个数就是运算符的操作数个数,运算符的操作数就成为函数的实参。
运算符也可以重载为成员函数。此时函数的参数个数就是运算符的操作数个数减一,运算符的操作数有一个成为函数作用的对象,其余的成为函数的实参。
必要时需要重载赋值运算符=,以避免两个对象内部的指针指向同一片存储空间。
运算符可以重载为全局函数,然后声明为类的友元。
>是在 iostream 中被重载,才成为所谓的“流插入运算符”和“流提取运算符”的。
类型的名字可以作为强制类型转换运算符,也可以被重载为类的成员函数。它能使得对象被自动转换为某种类型。
自增、自减运算符各有两种重载方式,用于区别前置用法和后置用法。
运算符重载不改变运算符的优先级。重载运算符时,应该尽量保留运算符原本的特性。

参考资料:http://c.biancheng.net/view/248.html
个人理解:

  • 操作符重载常用于class,因为复合类型不具有这些行为。需要程序员自己赋予它们这种行为。
  • 作为成员函数时,因为有隐藏形参,所以参数个数-1。作为全局函数则需要根据操作符原有要求个数全部列出
  • C++ 只会对成员函数的参数进行类型转换,而不会对调用成员函数的对象进行类型转换。所以成员函数形式进行运算时要注意对象在操作符的哪边

C++之运算符重载

标签:tor   赋值   一个   operator   load   自动   完成   个人   overload   

原文地址:https://www.cnblogs.com/ming-fei/p/14616210.html


评论


亲,登录后才可以留言!