国产丰满大乳无码免费播放_久草一级毛片_国产av黄色一区二区_亚洲一级 片内射欧美乱强上司_制服丝袜亚洲日韩中文字幕欧美_亚洲av中文小島_国产精品无码久久av嫩草下载_91视频黄片软件APP大全

XML|HTML|TXT
您當前位置: 軟件開發>> 新利在線娛樂>> 軟件開發行業資訊>> 瀏覽文章

C++ 操作符重載-濟南軟件開發

  1.什么是操作符重載

  可以使用分詞將操作符重載理解為:操作符+重載。

  C++中的操作符很多,如+,-,*,\等等。

  C++中的重載也是C++中面向對象多態的體現。

  簡單說操作符重載:

  C++中有:int a=2+3;  那么a=5

  操作符重載可以實現對自定義類型的操作:

  復制代碼

  1 #include

  2 using namespace std;

  3

  4 class Point{

  5 public:

  6 int x;

  7 int y;

  8 Point(int _x,int _y):x(_x),y(_y){

  9 }

  10

  11 Point operator+(Point &p){

  12 int t1=this->x+p.x;

  13 int t2=this->y+p.y;

  14 Point t(t1,t2);

  15 return t;

  16 }

  17 };

  18

  19 int main()

  20 {

  21 Point p1(1,3);

  22 Point p2(2,6);

  23 Point p3 = p1+p2;

  24 cout<<"p3:("<

  25 return 0;

  26 }

  復制代碼

  2.操作符重載的方式

  操作符重載的實現方式有兩種,即通過“友元函數”或者“類成員函數”。如下面代碼顯示了這兩種操作符重載:

  復制代碼

  1 class Point{

  2 public:

  3 int x;

  4 int y;

  5 Point(int _x,int _y);

  6

  7 Point operator+(Point &p); ///類成員函數,類成員函數可以使用this指針獲取自身對象

  8

  9 friend int operator*(Point &p1,Point &p2); ///友元函數

  10 };

  復制代碼

  可以看出,一個重載“+”,一個重載“*”,都是雙目運算符,但是類成員函數只有一個參數。這是因為類成員函數可以使用this指針獲取自身的對象,而友元函數則不行。

  所以類成員實現操作符重載需要的形式參數比原來少一個,這樣使用類成員函數實現一元操作符就不需要參數了。

  3.操作符重載例子

  1 #include

  2 using namespace std;

  3

  4 class Point{

  5 public:

  6 int x;

  7 int y;

  8 Point(int _x,int _y):x(_x),y(_y){

  9 }

  10

  11 Point operator+(Point &p){ ///實現坐標向量加

  12 int t1=this->x+p.x;

  13 int t2=this->y+p.y;

  14 Point t(t1,t2);

  15 return t;

  16 }

  17

  18 friend int operator*(Point &p1,Point &p2); ///實現內積

  19 };

  20

  21 int operator*(Point &p1,Point &p2)

  22 {

  23 return (p1.x*p2.x)+(p1.y*p2.y);

  24 }

  25

  26 int main()

  27 {

  28 Point p1(1,3);

  29 Point p2(2,6);

  30 cout<

  31

  32 Point p3 = p1+p2;

  33 cout<<"p3:("<

  34 return 0;

  35 }

  復制代碼

  4.重載操作符注意事項

  (1)重載操作符必須有一個類類型的參數。也就是說不能 int operator+(int,int);

  (2)操作符的優先級和結核性是固定的。

  (3)不在具有短路求值特性。如&&、||等,兩個數都會進行求值,而且順序不定。

  (4)不要重載具有內置含義的操作符。重載操作符主要是彌補普通操作符對類類型數據的作用。像賦值操作符、取地址操作符、逗號操作符等對類類型操作數都有默認的含義。

  (5)只能對已有的C++運算符進行重載,不允許用戶自己定義新的運算符。

  (6)絕大部分的運算符可重載,除了成員訪問運算符.,作用域運算符::,長度運算符sizeof以及條件運算符?:。

  (7)運算符重載后不能改變運算符的操作對象(操作數)的個數。

  5.特例操作符"++"、"--"的重載

  自增、自減操作符有前后之分,通過一個無意義的整數參數來區分。無參數的是前置運算符,帶參數的是后置運算符。

  如:

  int operator++();  //前置

  int operator++(int x);  //后置

  自增操作符實例

  1 #include

  2 using namespace std;

  3

  4 class Array{

  5 public:

  6 Array(int _num){ ///初始化一個數組,大小為_num

  7 this->a=new int[_num];

  8 this->num=_num;

  9 this->pos=0;

  10 for(int i=0;i

  11 *((this->a)+i)=i;

  12 }

  13

  14 ~Array(){

  15 delete [] a;

  16 }

  17

  18 int operator++(){ ///++前置

  19 if(pos == num-1){

  20 cout<<"Fuck"<

  21 return 0;

  22 }

  23 return *((this->a)+(++pos));

  24 }

  25

  26 int operator++(int x){ ///++后置

  27 if(pos == num-1){

  28 cout<<"Fuck"<

  29 return 0;

  30 }

  31 return *((this->a)+(pos++));

  32 }

  33

  34 int *a;

  35 int pos;

  36 int num;

  37 };

  38

  39 int main()

  40 {

  41 Array array(100);

  42 cout<<"pos="<

  43 cout<<"pre_position:"<<(++array)<

  44 cout<<"pos="<

  45 cout<<"********************************************************"<

  46

  47 cout<<"pos="<

  48 cout<<"post_position:"<<(array++)<

  49 cout<<"pos="<

  50 cout<<"********************************************************"<

  51 return 0;

  52 }


手機:18678812288 E-Mail:1069706080@qq.com
地址:山東省濟南市舜耕路泉城公園東門園內向北50米 魯ICP備07011972號 版權所有2008-2013 新利體育18
Baidu