C++中Operator类型强制转换成员函数

转载自:http://blog.csdn.net/sszgg2006/article/details/7724801
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
   class <类型说明符1>
    {
     public:
      operator <类型说明符2>();
      …
    }

  这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。

1.operator用于类型转换函数:

类型转换函数的特征:

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

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

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

#include"stdafx.h"
#include <iostream>
#include<string>
using namespace std;
class D {
  public:
     D(double d) : d_(d) {}
 
     /* “(int)D”类型转换:将类型D转换成int */
     operator int() const {
         std::cout << "(int)d called!" << std::endl;
         return static_cast<int>(d_);
     }
 
  private:
     double d_;
 };
 
 int add(int a, int b) {
     return a + b;
 }
 
  int main() {
     D d1 = 1.1;
     D d2 = 2.2;
     std::cout << add(d1, d2) << std::endl;
 
	 system("pause");
     return 0;
 }

在26行执行add(d1,d2)函数时“(int)D”类型转换函数将被自动调用,程序运行的输出为:

(int)d called!
(int)d called!
3

2)对象向不同类的对象的转换:
#include <iostream>
 
  class A
 {
  public:
     A(int num = 0) : dat(num) {}
     
     /* "(int)a"类型转换 */
     operator int() { return dat; }
 
  private:
     int dat;
 };
 
 
  class X
 {
  public:
     X(int num = 0) : dat(num) {}
 
     /* "(int)a"类型转换 */
     operator int() { return dat; }
 
     /* "(A)a"类型转换 */
     operator A() {
         A temp = dat;
         return temp;
     }
 
  private:
     int dat;
 };
 
 
 int main()
 {
     X stuff = 37;
     A more = 0;
     int hold;
 
     hold = stuff;    // convert X::stuff to int
     std::cout << hold << std::endl;
 
     more = stuff;    // convert X::stuff to A::more
     std::cout << more << std::endl;        // convert A::more to int
 
     return 0;
 }

上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型,这种方式需要先创建一个临时A对象再用它去赋值目标对象;更好的方式是为A类增加一个构造函数:
A(const X& rhs) : dat(rhs) {}
同时,请注意上面程序的第45行more的类型在调用std::cout时被隐式地转成了int!

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


你可能感兴趣的:(C++中Operator类型强制转换成员函数)