C++中的operator

本文深入探讨了C++中的类型转换函数及其特征,包括转换函数的定义、参数、返回值等关键要素。同时,文章详细介绍了操作符重载的概念,解释了如何将现有操作符与成员函数关联,以及注意事项。通过示例代码,展示了如何实现对象到基本数据类型及不同类对象之间的转换,以及如何重载大于号操作符进行比较。

类型转换


类型转换函数的特征

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

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

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

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

调用场景:

通常用于左值赋值表达式中的隐式转换

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


操作符重载

操作符重载的概念:

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

注意事项:

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


C++中,`operator`是一个关键字,用于定义和重载运算符。运算符是用于执行特定操作的符号或关键字,例如算术运算符(`+`、`-`、`*`等)、关系运算符(`==`、`<`、`>`等)、逻辑运算符(`&&`、`||`等)等。 通过使用`operator`关键字,我们可以在类中定义和重载运算符,以便自定义类的对象可以像内置类型一样使用运算符进行操作。这使得我们可以根据我们的需求来实现自定义的行为。 例如,我们可以在一个类中重载加法运算符`+`,以便在类的对象之间执行特定的加法操作。 下面是一个示例: ```cpp class MyNumber { private: int value; public: MyNumber(int val) : value(val) {} MyNumber operator+(const MyNumber& other) const { return MyNumber(value + other.value); } int getValue() const { return value; } }; int main() { MyNumber a(5); MyNumber b(10); MyNumber c = a + b; // 使用重载的加法运算符进行操作 cout << c.getValue() << endl; // 输出结果为 15 return 0; } ``` 在上面的示例中,我们定义了一个名为`MyNumber`的类,并重载了加法运算符`+`。通过使用重载的加法运算符,我们可以对`MyNumber`类的对象进行相加操作,并得到一个新的`MyNumber`对象。在`main()`函数中,我们创建了两个`MyNumber`对象 `a`和 `b`,并使用 `a + b` 进行相加操作,将结果赋值给变量 `c`。最后,我们通过调用`c.getValue()`来获取结果的值,并输出结果为15。 通过使用`operator`关键字,我们可以实现自定义的运算符重载,以使自定义类的对象可以使用类似于内置类型的运算符进行操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值