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语言指针的用法
    2021-10-10
  • C语言实现素因子分解

    C语言实现素因子分解

    这篇文章主要为大家详细介绍了C语言实现素因子分解,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C++实现LeetCode(26.有序数组中去除重复项)

    C++实现LeetCode(26.有序数组中去除重复项)

    这篇文章主要介绍了C++实现LeetCode(26.有序数组中去除重复项),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++基础学习之利用两个栈实现一个队列

    C++基础学习之利用两个栈实现一个队列

    这篇文章主要给大家介绍了关于C++基础学习之利用两个栈实现一个队列的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 详解C++语法中的虚继承和虚基类

    详解C++语法中的虚继承和虚基类

    本文主要介绍了C++语法中的虚继承和虚基类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • c语言读取obj文件转换数据的小例子

    c语言读取obj文件转换数据的小例子

    c语言读取obj文件转换数据的小例子,需要的朋友可以参考一下
    2013-03-03
  • 指向类成员函数的指针其实并非指针

    指向类成员函数的指针其实并非指针

    对于指向类成员的指针,必须紧记,指向类成员(非static)的指针并非指针
    2013-08-08
  • Seesion在C++服务端的使用方法

    Seesion在C++服务端的使用方法

    这篇文章主要介绍了Seesion在C++服务端是怎么使用的?本文给出了解决方案和实例代码供大家参考,需要的朋友可以参考下
    2020-02-02
  • Qt实现TCP网络编程

    Qt实现TCP网络编程

    这篇文章主要为大家详细介绍了Qt实现TCP网络编程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++之实现快速清空vector以及释放vector内存

    C++之实现快速清空vector以及释放vector内存

    这篇文章主要介绍了C++之实现快速清空vector以及释放vector内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论