您的位置:首页 > 运维架构

Operator 主要用法

2015-07-09 14:21 316 查看
来自: 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;

       }

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