C/C++中数据类型转换详解及其作用介绍

 更新时间:2021年09月02日 15:33:48   作者:我是小白呀  
这篇文章主要介绍了C/C++中数据类型转换详解及其作用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

概述

在日常的开发中, 我们经常会用到数据类型转换, 所以我们要对数据类型转换有一定的了解.

在这里插入图片描述

不同类型数据间的转换

在 C++ 中, 某些标准类型的数据之间可以自动转换.

隐式类型转换

隐式类型转换: 由 C++ 编译系统自动完成的, 我们无需干预. 例如:

int main() {
    int a = 6; 
    a  = a + 3.5; 
    cout << a << endl;

    return 0;
}

输出结果:

9

强制类型转换

强制类型转换: 在程序中将一种类型数据明确转换成另一指定的类型. 例如:

int main() {
    int a = int(2.3);
    double b = double(12);
    cout << a << endl;
    cout << b << endl;

    return 0;
}

输出结果:

2
12

自己声明的类型转换

如果用我们自己声明的类型进行数据转换就会发生一个问题: 编译系统并不知道如何转换.

解决办法:

  • 定义专门的函数来让编译系统知道怎样进行转换
  • 转换构造函数和类型转换函数

在这里插入图片描述

转换构造函数

转换构造函数 (conversion constructor function) 可以将一个其他类型的数据转换成一个类的对象的构造函数.

例如:

#ifndef PROJECT8_COMPLEX_H
#define PROJECT8_COMPLEX_H

#include <iostream>
using namespace std;

class Complex {
private:
    double real;
    double imaginary;
public:
    Complex() {};  // 无参构造
    Complex(double r, double i) : real(r), imaginary(i) {};  // 有参构造
    Complex(Complex & c) {  // 复制构造函数
        cout << "copy constructor" << endl;
    };
    Complex(double r) : real(r) {};  // 转换构造函数
    };
};

#endif //PROJECT8_COMPLEX_H

类型转换函数

当我们使用转换构造函数的时候我们可以将一个标准数据转换为类的对象. 我们使用类型转换函数 (type conversion function) 可以将一个类的对象反过来转换成标准类型的数据.

在这里插入图片描述

案例

Complex 类:

#ifndef PROJECT8_COMPLEX_H
#define PROJECT8_COMPLEX_H

#include <iostream>
using namespace std;

class Complex {
public:
    double real;
    double imaginary;
public:
    Complex() {};  // 无参构造
    Complex(double r, double i) : real(r), imaginary(i) {};  // 有参构造
    Complex(double r) : real(r) {};  // 转换构造函数
    operator double() {return real;};  // 类型转换函数
    Complex operator+(Complex &c) {
        return Complex(real + c.real, imaginary + c.imaginary);
    };
};

#endif //PROJECT8_COMPLEX_H

main:

#include <iostream>
#include "Complex.h"
using namespace std;

int main() {
    Complex c1(3.1, 4), c2(5.2, -10);
    double d1, d2;
    d1 = c1 + 2;  // 3.1 + 2, 调用类型展缓函数
    cout << d1 << endl;
    d2 = c1 + c2;  // 3.1 + 5.2, 调用类型展缓函数
    cout << d2 << endl;

    return 0;
}

输出结果:

5.1
8.3

编译系统会根据表达式的上下文, 自动调用类型转换函数, 将 Complex 类对象作为 double 类型数据使用.

应用

类型转换函数也叫做: 类型转换运算符函数, 类型转换运算符重载函数, 强制类型转换运算符重载函数.

不同类型进行各种混合运算的方案:

  • 转换构造函数
  • 类型转换函数
  • 运算符重载

进行各种运算时, 使用类型转换函数, 而不是对多种运算符进行重载. 工作量较小, 程序精干, 防止出现二义性.

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

相关文章

  • c++ 构造函数中调用虚函数的实现方法

    c++ 构造函数中调用虚函数的实现方法

    下面小编就为大家带来一篇c++ 构造函数中调用虚函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 如何在C语言中提取Shellcode并执行

    如何在C语言中提取Shellcode并执行

    Shellcode是一种独立于应用程序的机器代码,通常用于实现特定任务,如执行远程命令、注入恶意软件或利用系统漏洞,本文将深入探讨如何在C语言中提取Shellcode,并通过XOR加密技术增加其混淆程度,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2023-12-12
  • C++算法学习之贪心算法的应用

    C++算法学习之贪心算法的应用

    贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。本文为大家准备了几个示例,从而能深入了解贪心算法的应用,需要的可以参考一下
    2022-05-05
  • C++实现LeetCode(148.链表排序)

    C++实现LeetCode(148.链表排序)

    这篇文章主要介绍了C++实现LeetCode(148.链表排序),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 浅谈几种常见语言的命名空间(Namespace)

    浅谈几种常见语言的命名空间(Namespace)

    本文给大家简单介绍了下几种常见语言的命名空间的特性以及简单示例,大家对比下,有需要的小伙伴可以参考下
    2016-03-03
  • C++实现LeetCode(80.有序数组中去除重复项之二)

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

    这篇文章主要介绍了C++实现LeetCode(80.有序数组中去除重复项之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Win10下最新版CLion(2020.1.3)安装及环境配置教程详解

    Win10下最新版CLion(2020.1.3)安装及环境配置教程详解

    这篇文章主要介绍了Win10下最新版CLion(2020.1.3)安装及环境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平台集成开发环境,本文给大家介绍的非常详细,需要的朋友可以参考下
    2020-08-08
  • C语言文件操作实现数据持久化(帮你快速了解文件操作函数)

    C语言文件操作实现数据持久化(帮你快速了解文件操作函数)

    持久数据其实就是将数据保存到数据库,下面这篇文章主要给大家介绍了关于C语言文件操作实现数据持久化(帮你快速了解文件操作函数)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 浅谈C语言函数调用参数压栈的相关问题

    浅谈C语言函数调用参数压栈的相关问题

    下面小编就为大家带来一篇浅谈C语言函数调用参数压栈的相关问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • C语言趣味编程之平分七筐鱼

    C语言趣味编程之平分七筐鱼

    这篇文章介绍了C语言趣味编程之平分七筐鱼,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11

最新评论