c++重载操作符operator的用法

提点

由于看不懂以下两行代码
12 Future(const Future&) = delete;
13 Future& operator=(const Future&) = delete;

参考链接

转:c++重载操作符的两种使用方式

operator操作符重载

#操作符重载的概念:
将现有操作符与一个成员函数相关联,并将该操作符与其成员对象(操作数)一起使用。

#注意事项:

1)  重载不能改变操作符的基本功能,以及该操作符的优先级顺序。
2)  重载不应改变操作符的本来含义。
3)  只能对已有的操作符进行重载,而不能重载新符号。
4)  操作符重载只对类可用。
5)  以下运算符不能被重载:
.      原点操作符(成员访问符)
*    指向成员的指针
::      作用域解析符
?:    问号条件运算符
sizeof 操作数的字节数
 
操作符函数的一般格式:
     return_type operator op(argument list);
     return_type:返回类型(要得到什么)
     op:要重载的操作符
     argument list:参数列表(操作数有哪些)
//重载大于号操作符比较两个人的工资
#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;
      }
}

operator类型转换

类型转换函数的特征:

1)  型转换函数定义在源类中;
2)  须由 operator 修饰,函数名称是目标类型名或目标类名;
3)  函数没有参数,没有返回值,但是有return
语句,在return语句中返回目标类型数据或调用目标类的构造函数。

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

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

对象向不同类的对象的转换:
//通过类型转换函数求半径为5的圆的面积
//并将其存储在float型变量中打印输出
#include <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;                   
}


猜你喜欢

转载自blog.csdn.net/qq_40904479/article/details/120948646