关闭

Operator 主要用法

标签: operator 运算符
170人阅读 评论(0) 收藏 举报
分类:
来自: http://blog.sina.com.cn/s/blog_507fc2360100cswi.html

推荐浅叙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(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:
//重载大于号操作符比较两个人的工资
#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;
       }
}

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(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
//
重载大于号操作符比较两个人的工资
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;
       }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30316次
    • 积分:647
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:24篇
    • 译文:0篇
    • 评论:0条
    文章分类