运算符"几乎是所有的编程语言中都会出现的概念,例如+、-、*、/ 就是最常见的运算符。C++预定义的运算符只能作用于C++已经定义的基本数据类型,对于用户自定义的类型,如果也需要进行类似的运算操作的话,就需要重新去定义这些运算,赋予运算符新的功能,即"运算符重载"。
一、运算符重载时需要注意的点
- 运算符重载不改变运算符的"优先级"与"结合性",也不改变运算符的操作数个数。
- 重载运算符时不应该改变运算符的含义,比如说"+"重载之后仍然表示加法的含义。
- 运算符重载的本质是函数重载,运算符函数可以作为成员函数,也可以作为非成员函数,作为非成员函数时一般为友元函数。
- 在大多数情况下,将运算符函数重载为类的成员函数和类的友元函数都是可以的。但是要注意下面几个运算符函数必须要重载为成员函数:=、[]、()、->。
- C++中大部分运算符都是可以被重载的,但是有5个运算符不允许被重载:"."、".*"、"::"、"?:"、"sizeof"。
二、运算符重载的语法:
<code> operator(){ //函数体}/<code>
三、运算符重载实例(复数类)
<code>#include <iostream>using namespace std;class Complex {public: Complex(int real, int imag); ~Complex(); // 成员函数重载运算符 Complex& operator+(const Complex& c); // 友元函数重载"流操作运算运算符" friend ostream& operator<real_ += c.real_; this->imag_ += c.imag_; return *this;}ostream& operator< 0) out << "+" << c.imag_ << "i"; else out << c.imag_ << "i"; return out;}int main(){ Complex a(4, -6); cout << a << endl; // 等于operator</<iostream>/<code>
閱讀更多 神祕的程序員 的文章