本文章是作者根据史蒂芬·普拉达所著的《C++ Primer Plus》而整理出的读书笔记,如果您在浏览过程中发现了什么错误,烦请告知。另外,此书由浅入深,非常适合有C语言基础的人学习,感兴趣的朋友可以自行阅读此书籍。
运算符重载
我们先了解下函数重载的概念,函数重载,也叫函数多态,指的是用户可以定义多个名称相同但特征标(参数列表)不同的函数,函数重载可以用同名的函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。
运算符重载也是一种形式的C++多态,它将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。实际上,很多C++(包括C语言)运算符已经被重载。例如,将*运算符用于地址,将得到存储在这个地址中的值;但将它用于两个数字时,得到的将是它们的乘积。C++根据操作数的数目和类型来决定采用哪种操作。
**C++允许将运算符重载扩展到用户定义的类型。**例如,允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用哪种加法定义。重载运算符可使代码看起来更自然。
运算符函数的格式如下:
operatorop(argument-list)
例如,operator+()重载+运算符,operator*()重载*运算符。op必须是有效的C++运算符,不能虚构一个新的符合。比如不能有operator@()这样的函数,因为C++中没有@运算符。
假设有一个Student类,我们为它定义了一个,operator+()成员函数,目的是将两个Student对象的总分相加。假设st1,st2,st3都是类对象,那么我们就可以这样写:
st3 = st1 + st2;
编译器发现,操作数是Student类对象,因此使用相应的运算符重载函数替换上述运算符:
st3 = st1.operator+(st2);
然后该函数隐式地使用st1(调用了方法),而显示地使用st2对象(被作为参数传递),来计算总和,并返回这个值。更重要的是,可以使用简单的+运算符表示法,而不必使用笨拙的函数表示法。