C++ 转换函数用法案例详解

 更新时间:2021年09月10日 17:01:50   作者:双非渣渣的自赎之路  
这篇文章主要介绍了C++ 转换函数用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

1.标准数据之间会进行隐式类型安全转换,规则如下:

 在这里主要探讨c++中类类型与普通类型的转换:

1.类类型转换普通类型

class Fraction
{
public:
	Fraction(int num,int den=1);
	~Fraction();
    //转换函数
   /*
    转换函数语法规则:
     operator Type()
       {
      Type ret ;
      ........
       return ret;
    }
   */
	operator double() const {
		return (double)(m_Numerator*1.0 / m_Denominator);
	}
private:
	int  m_Numerator;
	int m_Denominator;
};
 
 
 
Fraction f(3, 5);
double d = 4 + f;//d=4.6

这里4+f,调用转换函数将f转换为0.6

2.普通类型转换为类类型(non-explicit-one-argument ctor)

class Fraction
{
public:
	Fraction(int num,int den=1);
	~Fraction();
	
	Fraction operator+(const Fraction& f) {
		return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
			f.m_Denominator * this->m_Denominator);
	}
 
private:
	int  m_Numerator;
	int m_Denominator;
};
Fraction f(3, 5);
Fraction d = f + 4;//调用+运算符函数,4会转为Fraction(4,1),含有接受一个参数的构造函数,否则也无法转换

3.同时含有转换函数和可以隐式的调用构造函数(转换构造参数)会报错

class Fraction
{
public: 
   /*
    转换构造函数:
    -有仅有一个参数
    -参数是基本类型
    -参数是其它类型
   */
	Fraction(int num,int den=1);
	~Fraction();
 
	operator double() const {
		return (double)(m_Numerator*1.0 / m_Denominator);
	}
	Fraction operator+(const Fraction& f) {
		return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
			f.m_Denominator * this->m_Denominator);
	}
private:
	int  m_Numerator;
	int m_Denominator;
};

报错:   “Fraction::operator +”: 2 个重载有相似的转换    ,

所以在我们写构造函数都会使用关键字 explicit 防止类型隐式转换

class Fraction
{
public:
	
	explicit Fraction(int num,int den=1);
	~Fraction();
	operator double() const {
		return (double)(m_Numerator*1.0 / m_Denominator);
	}
	Fraction operator+(const Fraction& f) {
		return Fraction(this->m_Numerator * f.m_Denominator + this->m_Denominator * f.m_Numerator,
			f.m_Denominator * this->m_Denominator);
	}
 
private:
	int  m_Numerator;
	int m_Denominator;
};
Fraction f(3, 5);
Fraction d = f + 4;//报错:不存在从 "double" 转换到 "Fraction" 的适当构造函数
double d = f + 4;//可以,f转换

到此这篇关于C++ 转换函数用法案例详解的文章就介绍到这了,更多相关C++ 转换函数用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C语言中的指针与数组的定义与使用

    详解C语言中的指针与数组的定义与使用

    这篇文章主要介绍了C语言中的指针与数组的定义与使用,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 使用opencv拉伸图像扩大分辨率示例

    使用opencv拉伸图像扩大分辨率示例

    这篇文章主要介绍了使用opencv拉伸图像扩大分辨率示例,需要的朋友可以参考下
    2014-04-04
  • 聊聊C++ 运算符重载知识

    聊聊C++ 运算符重载知识

    运算符重载是一种形式的C++多态,重载运算符可以使代码看起来更加自然,下面通过例子介绍下C++ 运算符重载知识,感兴趣的朋友一起看看吧
    2021-11-11
  • Qt6.3 + Clion +MSVC2019环境配置详解

    Qt6.3 + Clion +MSVC2019环境配置详解

    本文主要介绍了Qt6.3 + Clion +MSVC2019环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 教你用C语言实现三子棋

    教你用C语言实现三子棋

    这篇文章主要为大家详细介绍了C语言实现简单三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 深入解读C++中的指针变量

    深入解读C++中的指针变量

    这篇文章主要介绍了深入解读C++中的指针变量,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++中this指针用法示例详解

    C++中this指针用法示例详解

    在C++编程中this指针是每个非静态成员函数的隐含参数,指向调用对象的地址,它用于区分同一个类的不同实例,并访问成员变量和成员函数,这篇文章主要介绍了C++中this指针用法的相关资料,需要的朋友可以参考下
    2024-09-09
  • C语言中如何利用循环嵌套输出一个菱形

    C语言中如何利用循环嵌套输出一个菱形

    这篇文章主要介绍了C语言中如何利用循环嵌套输出一个菱形问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • VS2022调试通过海康摄像头烟火识别SDK的实现

    VS2022调试通过海康摄像头烟火识别SDK的实现

    本文主要介绍了VS2022调试通过海康摄像头烟火识别SDK的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • c++ 虚函数与纯虚函数的区别(深入分析)

    c++ 虚函数与纯虚函数的区别(深入分析)

    本篇文章是对c++中虚函数与纯虚函数的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论