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

 更新时间:2013年09月12日 10:21:51   作者:  
转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:

复制代码 代码如下:

   class <类型说明符1>
    {
     public:
      operator <类型说明符2>();
      …
    }


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

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

类型转换函数的特征:

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

类型转换函数主要有两类:
1) 对象向基本数据类型转换:

复制代码 代码如下:

#include<iostream>
#include<string>
using namespace std;

class D{
public:
 D(double d):d_(d) {}
 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;
}


结果:




可见在add(d1,d2)函数调用时隐性地调用了operator int() const 函数。

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

复制代码 代码如下:

#include<iostream>
class X;
class A
{
public:
 A(int num=0):dat(num) {}
    A(const X& rhs):dat(rhs) {}
 operator int() {return dat;}
private:
 int dat;
};

class X
{
public:
 X(int num=0):dat(num) {}
 operator int() {return dat;}
 operator A(){
  A temp=dat;
  return temp;
 }
private:
 int dat;
};

int main()
{
  X stuff=37;
  A more=0;
  int hold;
  hold=stuff;
  std::cout<<hold<<std::endl;
  more=stuff;
  std::cout<<more<<std::endl;
  return 0;
}




上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型。

2.operator 用于操作符重载:

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

注意事项:

1) 重载不能改变操作符的基本功能,以及该操作符的优先级顺序。

2) 重载不应改变操作符的本来含义。

3) 只能对已有的操作符进行重载,而不能重载新符号。

4) 操作符重载只对类可用。

5) 以下运算符不能被重载:

. 原点操作符(成员访问符)

* 指向成员的指针

:: 作用域解析符

? : 问号条件运算符

sizeof 操作数的字节数

操作符函数的一般格式:

return_type operator op(argument list);

return_type:返回类型(要得到什么)

op:要重载的操作符

argument list:参数列表(操作数有哪些)

相关文章

  • C语言绘制三角函数曲线

    C语言绘制三角函数曲线

    这篇文章主要为大家详细介绍了C语言绘制三角函数曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C++中的explicit关键字详解

    C++中的explicit关键字详解

    这篇文章主要介绍了C++中的explicit关键字详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • C++实现简单FTP客户端软件开发

    C++实现简单FTP客户端软件开发

    这篇文章主要为大家详细介绍了C++实现简单FTP客户端软件开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言关于注释的知识点总结

    C语言关于注释的知识点总结

    在本篇文章里小编给大家分享的是关于C语言关于注释的知识点总结,需要的朋友们可以参考学习下。
    2020-02-02
  • C语言实现发送邮件功能

    C语言实现发送邮件功能

    这篇文章主要为大家详细介绍了C语言实现发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 字符串中找出连续最长的数字字符串的实例代码

    字符串中找出连续最长的数字字符串的实例代码

    这篇文章介绍了字符串中找出连续最长的数字字符串的实例代码,有需要的朋友可以参考一下
    2013-09-09
  • QT实战之实现图片浏览系统

    QT实战之实现图片浏览系统

    这篇文章主要介绍了如何利用QT编写一个图片浏览系统,可以支持自动播放,左右拖动切换,点击列表切换,点击按钮切换等功能,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • Visual Studio 2019 Professional 激活方法详解

    Visual Studio 2019 Professional 激活方法详解

    这篇文章主要介绍了Visual Studio 2019 Professional 激活方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Qt跨平台窗口选择功能的实现过程

    Qt跨平台窗口选择功能的实现过程

    很多时候为了方便软件的使用,我们需要让编写的界面程序显示在最上层,这时候就需要对窗口属性进行调整,下面这篇文章主要给大家介绍了关于Qt跨平台窗口选择功能的实现过程,需要的朋友可以参考下
    2022-12-12
  • C++类型转换运算符的实例详解

    C++类型转换运算符的实例详解

    这篇文章主要介绍了C++类型转换运算符的实例详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论