您的位置:首页 > 编程语言 > C语言/C++

C++中operator的主要用法

2013-03-18 09:38 246 查看
1.  operator 用于类型转换函数:

类型转换函数的特征:

1)  型转换函数定义在源类中;

2)  须由 operator 修饰,函数名称是目标类型名或目标类名;

3)  函数没有参数,没有返回值,但是有return

语句,在return语句中返回目标类型数据或调用目标类的构造函数。

类型转换函数主要有两类:

1)  对象向基本数据类型转换:

对象向不同类的对象的转换:

例程1:

//通过类型转换函数求半径为5的圆的面积

//并将其存储在float型变量中打印输出

#i nclude <iostream>

using namespace std;

class CArea

{

      float area;

public:

      CArea()

      {

             area=0;

      }

      CArea(floata)          //重载含有一个参数的构造函数

      {

             area=a;

      }

      void getArea()

      {

             cout<<area<<endl;

      }

      void setArea(float a)

      {

             area=a;

      }

      operatorfloat()           //类型转换函数

      {                              

//将面积类对象转换为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:

//重载大于号操作符比较两个人的工资

#i nclude <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;

      }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: