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-01-01
  • 详解C++ STL模拟实现vector

    详解C++ STL模拟实现vector

    这篇文章主要为大家详细介绍了C++如何模拟实现STL容器vector,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2023-01-01
  • STL常用算法之排序算法详解

    STL常用算法之排序算法详解

    这篇文章主要介绍了STL常用算法之排序算法详解,STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器,本文主要讲算法中的排序算法,需要的朋友可以参考下
    2024-01-01
  • 数据结构之Treap详解

    数据结构之Treap详解

    这篇文章主要介绍了数据结构之Treap详解,本文讲解了Treap的基本知识、Treap的基本操作、Treap的高级操作技巧等,需要的朋友可以参考下
    2014-08-08
  • C++程序中main(int argc, char *argv[])函数的参数意义

    C++程序中main(int argc, char *argv[])函数的参数意义

    这篇文章主要介绍了C++程序中main(int argc, char *argv[])函数的参数意义,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 详解C语言初阶基础(2)

    详解C语言初阶基础(2)

    这篇文章主要介绍了C语言中的初阶基础,介绍了其相关概念,具有一定参考价值。需要的朋友可以了解下,希望能够给你带来帮助
    2021-11-11
  • C++ Boost weak_ptr智能指针超详细讲解

    C++ Boost weak_ptr智能指针超详细讲解

    智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。虽然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷贝和赋值操作),因此很少有人使用。它是Boost各组件中,应用最为广泛的一个
    2022-11-11
  • C 语言基础之C 语言三大语句注意事项

    C 语言基础之C 语言三大语句注意事项

    今天讲解的内容,则是自己对于这三种语句一些细节的简单介绍,分支语句:if,switch、循环语句:while,for,do while、goto语句,感兴趣的小伙伴可以参考下面具体的文章内容
    2021-09-09
  • C++ Boost Random随机函数详解

    C++ Boost Random随机函数详解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言实现抢红包程序代码精简版

    C语言实现抢红包程序代码精简版

    这篇文章主要为大家详细介绍了C语言实现抢红包程序代码的精简版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论