C++ 数据类型转换

article/2025/10/5 19:18:59

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 类型数据使用.

应用

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

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

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

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


http://chatgpt.dhexx.cn/article/r4jMOyBY.shtml

相关文章

C语言数据类型转换详解

数据类型转换就是将数据&#xff08;变量、数值、表达式的结果等&#xff09;从一种类型转换为另一种类型。 自动类型转换 自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换&#xff0c;这种转换不需要程序员干预&#xff0c;会自动发生。 1 . 将一种类型的…

Java的数据类型转换

Java的数据类型转换分为以下的两种&#xff1a; 一、自动类型转换 首先我们要了解自动类型转换是什么&#xff0c;为什么要进行自动类型转换呢&#xff1f; 1.自动类型转换就是类型范围小的变量&#xff0c;可以直接赋值给类型范围大的变量。比如以下代码&#xff1a; 其中int类…

Python 中数据类型转换

前两篇回顾&#xff1a; 第一篇&#xff1a;环境搭建以及运行 Python 的 3 种方式 第二篇&#xff1a;变量及数据类型 今天是 Python 基础系列第三篇&#xff1a;三种数据类型转换形式&#xff08;布尔值转换、字符串转换、数值转换&#xff09;。 一、转为布尔值 一&#xf…

C语言数据类型转换

文章目录 前言一、类型自动转换二、赋值转换三、强制类型转换 前言 C语言中&#xff0c;整型、单精度型、双精度型和字符型数据可以进行混合运算。字符型数据可以得与整型通用。例如&#xff1a; 100′A′8. . 65-2456. 75′a′是一个合法的运算表达式。在进行运算时&#xf…

数据类型的转换

数据类型转换分为两种&#xff1a;自动类型转换和强制类型转换。 一、自动类型转换 ①转换前的数据类型与转换后的类型兼容。 ②转换后的数据类型的表示范围比转换前的类型大。 条件②说明不同类型的数据进行运算时&#xff0c;需先转换为同一类型&#xff0c;然后进行运算。…

数据类型转换

数据类型转换 首先&#xff0c;数据类型一共有6种&#xff0c;分别是字符串、布尔值、数值、空值、未定义和对象。 其中基本数据类型&#xff1a; 1、number数值类型&#xff1a;在JS中所有的数值都是Number类型&#xff0c;包括了整数、浮点数(小数) - 拓展部分&#xff1a…

Java全栈开发

2022年9月6日更新 更多见 个人掘金收藏 写了一个小工具 &#xff0c;可以点击查看和搜索&#xff0c;见这篇博客 JavaFx入门5 - 一个小工具的实现 网上的一些Java全栈开发技术汇总 代码更新 &#xff1a;https://git.code.tencent.com/Java66/openJava.git 目录 比较好的…

java appkey_Java全栈工程师 风袖 appkey

Java全栈工程师 全局性思维 现代项目的开发&#xff0c;需要掌握多种技术。互联网项目&#xff0c;需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等&#xff0c;比较前卫的项目&#xff0c;还会用到Single Pag…

Java全栈进阶

https://shq5785.blog.csdn.net/

java全栈前景_Java全栈开发哪个发展前景好

原标题&#xff1a;Java全栈开发哪个发展前景好 全栈和java哪个能更好迎合市场需求&#xff0c;有同学咨询学习哪个在以后前景和工作薪水上能更吃香&#xff0c;首先我们先来了解下Java开发和全栈开发的区别。 全栈开发工程师是指掌握多种技能&#xff0c;能够独立开发应用程序…

Java全栈工程师学习路线(思维导图)送你进大厂

当今软件行业中&#xff0c;Java是最流行的编程语言之一。许多企业都需要Java开发人员来构建和维护应用程序。因此&#xff0c;作为一名Java开发人员&#xff0c;学习Java编程语言和相关技术是至关重要的。下面是一些Java学习路线的建议&#xff1a; 目录 Java 基础Java高级We…

零基础Java全栈教程--全文目录

文章目录 1. 教程结构2. 教程目录2.1 HTML篇2.2 CSS篇2.3 JS篇2.4 Java 语言基础篇2.5 Java Web基础篇2.6 JSJava项目实战篇2.7 jQuery篇2.8 BootStrap篇2.9 Java SSM篇2.10 BootStrapSSM项目实战篇2.11 ESWebpack篇2.12 Vue篇2.13 Element篇2.14 SpringBoot篇2.15 VueSpringBo…

Java全栈学习路线

在学习Java苦于没有自己的完整学习步骤&#xff0c;下面是一个大概的学习路线&#xff1a; 一、Java基础 二、JavaWeb 三、SSM框架 四、Linux运维 五、微服务和分布式 六、大数据开发 七、持续学习 总结&#xff1a; 目前自己正处于一个找工作的阶段&#xff0c;也希望这些学…

java全栈开发主要工作内容,java全栈工程师

KEYRESPONSIBILITIES: •Code,testandreleasechangesasperstandardCitiguidelines •Provideanalysisandwritefunctional&technicalspecifications •Communicateandworkcloselywithpeerdevelopersofglobalteam •HandleBAUactivities,includingidentifyingandresolvingbug…

java全栈知识点[面试篇](一)

jjava全栈知识点[面试篇]&#xff08;一&#xff09; 阻塞与等待的状态转变⭐Synchronized本质上是通过什么保证线程安全的?volatile、synchronized和Lock如何保证可见性⭐Synchronized使得同时只有一个线程可以执行&#xff0c;性能比较差&#xff0c;有什么提升的方法?⭐sy…

java面试必问,java全栈面试题

一、前言 有句话&#xff1a;正因为你优秀&#xff0c;所以难以卓越&#xff01; 刚开始听这句话还在上学&#xff0c;既不卓越、也不优秀&#xff0c;甚至可能还有点笨&#xff01;但突然从某次爬到班级的前几名后&#xff0c;开始喜欢上了这种感觉&#xff0c;原来前面的风…

从搬砖工到架构师,Java全栈学习路线总结

&#x1f307;文章目录 前言一、前置知识二、 Web前端基础示例&#xff1a;1.文本域2.密码字段 三、后端基础一. Java基础二. 数据库技术三. Web开发技术四. 框架技术五. 服务器部署 四、其他技术五、全栈开发六、综合实践七、学习教程一、前端开发二、后端开发三、数据库开发四…

java全栈(java全栈开发工程师)

如何记录Java栈区的指针&#xff1f; optop,frame和vars用于记录指向Java栈区的指针 Java全栈工程师在未来的发展如何&#xff1f; 全栈工程师是指网站开发所有东西都要负责(即前端和后端都要负责)&#xff0c;前端是指网站的网页设计&#xff0c;后端是指网站的数据动态变化&a…

1. JAVA全栈知识体系--- Java基础

1. JAVA全栈知识体系— Java基础 文章目录 1. JAVA全栈知识体系--- Java基础1.1 语法基础面向对象特性&#xff1f;a a b 与 a b 的区别3*0.1 0.3 将会返回什么? true 还是 false?能在 Switch 中使用 String 吗?对equals()和hashCode()的理解&#xff1f;final、finaliz…

Java 全栈知识体系

40000 字长文总结。 全栈知识体系总览 Java入门与进阶 面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 Java 基础 - 图谱 & Q/A 基础知识点复习完了以后&#xff0c;我们需要深入的理解Java中的一些基础机制&#xff1a; Java 基础 - 泛型机制详解 Java…