淺敘operator 的主要用法

1.  operator 用於類型轉換函數:

類型轉換函數的特徵:

1)  型轉換函數定義在源類中;
2)  須由 operator 修飾,函數名稱是目標類型名或目標類名;
3)  函數沒有參數,沒有返回值,但是有return 語句,在return語句中返回目標類型數據或調用目標類的構造函數。

類型轉換函數主要有兩類:
 
1)  對象向基本數據類型轉換:

 對象向不同類的對象的轉換:

例程1:
//通過類型轉換函數求半徑爲5的圓的面積
//並將其存儲在float型變量中打印輸出
#include <iostream>
using namespace std;

class CArea
{
       float area;
public:
       CArea()
       {
              area=0;
       }
       CArea(float a)           //重載含有一個參數的構造函數
       {
              area=a;
       }
       void getArea()
       {
              cout<<area<<endl;
       }
       void setArea(float a)
       {
              area=a;
       }
       operator float()            //類型轉換函數
       {                                 //將面積類對象轉換爲float型數據
              return area;
       }
};

class CCircle
{
       float R;
public:
       void getR()
       {
              cout<<R<<endl;
       }
       void setR(float r)
       {
              R=r;
       }
       operator CArea()   //類型轉換函數
       {                                 //將圓類對象轉爲面積類對象
              float area=3.1415926*R*R;
              return (CArea(area));
       }    
};

void main()
{
       CCircle cir;
       CArea are;
       float a;

       cir.setR(5);
       cir.getR();                     //打印圓的半徑
       are.getArea();           //打印轉換前的面積                         
       are=cir;                 //將圓類對象轉爲面積類對象
       are.getArea();           //打印轉換後的面積    
       a=are;                          //將面積類對象轉換爲float型數據
       cout<<a<<endl;                    
}


2.  operator 用於操作符重載:


操作符重載的概念:

        將現有操作符與一個成員函數相關聯,並將該操作符與其成員對象(操作數)一起使用。

注意事項:

1)  重載不能改變操作符的基本功能,以及該操作符的優先級順序。

2)  重載不應改變操作符的本來含義。

3)  只能對已有的操作符進行重載,而不能重載新符號。

4)  操作符重載只對類可用。

5)  以下運算符不能被重載:

 .       原點操作符(成員訪問符)

 *     指向成員的指針

::       作用域解析符

 ? :     問號條件運算符

 sizeof 操作數的字節數

   操作符函數的一般格式:

               return_type operator op(argument list);

      return_type:返回類型(要得到什麼)

        op:要重載的操作符

      argument list:參數列表(操作數有哪些)

例程2:
//重載大於號操作符比較兩個人的工資
#include <iostream>
using namespace std;

class employee
{
       int salary;
public:
       void setSalary(int s)
       {
              salary=s;
       }
       void getSalary()
       {
              cout<<salary<<endl;
       }
       bool operator >(const employee & e)//重載大於號操作符
       {
              if(salary > e.salary)
                     return true;
              else
                     return false;
       }
};
void main()
{
       employee emp1,emp2;
       emp1.setSalary(1000);
       emp2.setSalary(2000);
       if (emp1 > emp2)
       {
              cout<<"emp1比emp2工資高"<<endl;
       }
       else
       {
              cout<<"emlp1沒有emp2工資高"<<endl;
       }
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章