重载操作符 'operator'

Posted amaris-diana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载操作符 'operator'相关的知识,希望对你有一定的参考价值。

operator 是 C++ 的(运算符的)重载操作符。用作扩展运算符的功能。

它和运算符一起使用,表示一个运算符函数,理解时应将  【operator+运算符】 整体上视为一个函数名。

要注意的是:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。

使用时:

【返回类型】 【operator+运算符】 (const ElemType&a)const  {...}

 

为什么需要重载操作符?

系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class。

而针对用户自己定义的类型,如果需要其支持基本操作,如’+’,‘-’,‘*’,‘/’,‘==’等等,则需要用户自己来定义实现(重载)这个操作符在此新类型的具体实现。

 

例:

创建一个point类并重载‘+’,‘-’运算符;

技术分享图片
 1 struct point
 2 {
 3     double x;
 4     double y;
 5     point() {};
 6     //初始化
 7     point(double a,double b)
 8     {
 9         x = a;
10         y = b;
11     };
12     //重载+运算符
13     point operator + (const point& a) const
14     {
15         return point (x+ a.x, y+ a.y);
16     }
17     //重载-运算符
18     point operator - (const point& a)const
19     {
20         return point(x-a.x, y-a.y);
21     }
22 };
View Code

检验;

技术分享图片
 1 int main()
 2 {
 3     point w(2, 6), v(5, 3);
 4     printf("w与v的坐标分别为:
");
 5     printf("w = (%.2f, %.2f)
v = (%.2f, %.2f)
", w.x, w.y, v.x, v.y);
 6     point z = w+ v;
 7     printf("w+v 的值z = (%.2f, %.2f)
", z.x, z.y);
 8     z = w- v;
 9     printf("w-v 的值z = (%.2f, %.2f)
", z.x, z.y);
10     return 0;
11 }
View Code

检验结果;

技术分享图片

 

end;

以上是关于重载操作符 'operator'的主要内容,如果未能解决你的问题,请参考以下文章

重载 operator() 在 Cython 中失败

标准库中的重载/字符串类

Django项目与mysql交互进行数据迁移时报错:AttributeError: 'str' object has no attribute 'decode'(示例代

错误:重载的 'operator<<' 必须是二元运算符(有 3 个参数)

Operator '?:' has lower precedence than '*'; '*' will be evaluated first(代码片

fastadmin操作栏添加查看订单详情按纽