C++中operator的主要用法

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;
      }
}


  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值