C++ 操作符過載

Andy Niu發表於2013-10-11

1、為什麼要使用操作符過載?

操作符和方法在本質上一樣,使用操作符更符合人性化的描述。

2、操作符過載分為 普通操作符過載和成員操作符過載,區別在於:

  a、普通操作符過載要訪問物件的私有成員,因此要設計為friend,而成員操作符過載不需要;

  b、相比於普通操作符過載,成員操作符過載,少了一個形參,因為成員方法總是與物件繫結使用的,被繫結的物件就是操作符的第一個引數;


 示例程式碼:

 1 #include "StdAfx.h"
 2 
 3 class Point
 4 {
 5 private :
 6     int x;
 7     int y;
 8 
 9 public :
10     Point ();
11 
12     Point(int x,int y);
13 
14     void Print()const;
15 
16     void Set(int x,int y);
17 
18     friend Point operator+(const Point& a, const Point& b);
19 
20     friend Point operator+(const Point& a, int b);
21 
22     Point operator-(const Point& b)
23     {
24         Point s;
25         s.Set(this->x-b.x, this->y-b.y);
26         return s;
27     }
28 
29     Point operator-(int b)
30     {
31         Point s;
32         s.Set(this->x-b, this->y-b);
33         return s;
34     }
35 };
View Code
 1 #include "StdAfx.h"
 2 #include <iostream>
 3 #include "Point.h"
 4 
 5 Point ::Point()
 6 {
 7 }
 8 
 9 Point::Point(int x,int y)
10 {
11     this->x = x;
12     this->y = y;
13 }
14 
15 void Point::Print()const
16 {
17     std::cout<<"X:"<<x<<" Y:"<<y<<std::endl;
18 }
19 
20 Point operator+(const Point& a,const Point& b)
21 {
22     Point s(a.x+b.x,a.y+b.y);
23 
24     return s;
25 }
26 
27 
28 Point operator+(const Point& a,int b)
29 {
30     Point s(a.x+b,a.y+b);
31 
32     return s;
33 }
34 
35 void Point::Set(int x,int y)
36 {
37     this->x = x;
38     this->y = y;
39 }
View Code

 

相關文章