【C++入门】Cyber尖层的虚实重构—— 【类与对象】类型转换

⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///


WARNING \]: DETECTING HIGH ENERGY **🌊 🌉 🌊 心手合一 · 水到渠成** ![分隔符](https://i-blog.csdnimg.cn/direct/60a3de2294e9439abad47378e657b337.gif) |------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------| | **\>\>\> ACCESS TERMINAL \<\<\<** || | [**\[ 🦾 作者主页 \]**](https://blog.csdn.net/fengtinghuqu520?spm=1000.2115.3001.5343) | [**\[ 🔥 C语言核心 \]**](https://blog.csdn.net/fengtinghuqu520/category_12955956.html) | | [**\[ 💾 编程百度 \]**](https://blog.csdn.net/fengtinghuqu520/category_13083835.html) | [**\[ 📡 代码仓库 \]**](https://blog.csdn.net/fengtinghuqu520/article/details/147275999?spm=1001.2014.3001.5502) | --------------------------------------- Running Process: 100% \| Latency: 0ms *** ** * ** *** #### 索引与导读 * [由构造函数引起的隐式类型转换](#由构造函数引起的隐式类型转换) * [一、内置类型隐式转换为类类型](#一、内置类型隐式转换为类类型) * [二、使用 explicit 禁止隐式转换](#二、使用 explicit 禁止隐式转换) * [三、类类型对象之间的隐式转换](#三、类类型对象之间的隐式转换) * [💡 知识点补充:多参数构造函数的隐式转换](#💡 知识点补充:多参数构造函数的隐式转换) * [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议) ## 由构造函数引起的隐式类型转换 当一个构造函数只需要一个参数时,编译器可以用它将该参数类型的值\*\*"自动"\*\*转换为类对象 ## 一、内置类型隐式转换为类类型 如果一个类定义了一个接受某种内置类型(如 `int`, `double`)的构造函数,`C++` 允许你直接把该内置类型赋值给类对象 ```cpp #include #include class Date { public: // 相关的构造函数:接受一个内置类型 int Date(int year) : _year(year) { std::cout << "Date(int) 构造函数被调用" << std::endl; } private: int _year; }; int main() { Date d1 = 2024; return 0; } ``` **╔═█▓▒░ CODE CORE 🔥** **┌─────────────┐ │ 代码关键点 │Date d1 = 2024; └─────────────┘** * **隐式类型转换:** `int` 转换为 `Date` 对象 * **编译器实际上执行了:** `Date temp(2024); d1 = temp;` *** ** * ** *** ## 二、使用 explicit 禁止隐式转换 有时候这种"自动转换"会导致意外的 `Bug`(比如你本意是传个数字,结果编译器偷偷帮你造了个对象) 使**用 `explicit` 关键字可以锁死这个行为** ```cpp class SmartDate { public: // 使用 explicit 关键字 explicit SmartDate(int year) : _year(year) {} private: int _year; }; int main() { // SmartDate d2 = 2024; // 编译报错!不再支持隐式转换 // 必须显式调用构造函数 SmartDate d3(2024); SmartDate d4 = SmartDate(2025); return 0; } ``` *** ** * ** *** ## 三、类类型对象之间的隐式转换 不仅仅是内置类型,两个不同的类对象之间也可以进行隐式转换,前提是目标类有一个构造函数能接收源类的对象 ```cpp class Time { public: int _hour; Time(int hour) : _hour(hour) {} }; class DateTime { public: // 构造函数参数是另一个类对象 (Time) DateTime(const Time& t) : _hour(t._hour) { std::cout << "Time 对象隐式转换为 DateTime 对象" << std::endl; } private: int _hour; }; int main() { Time t1(12); // 隐式转换:Time -> DateTime DateTime dt = t1; return 0; } ``` *** ** * ** *** ## 💡 知识点补充:多参数构造函数的隐式转换 在 C++11 之前,隐式转换通常只发生在一个参数的构造函数上。但 C++11 引入列表初始化后,多个参数也可以触发隐式转换 ```cpp class Coordinate { public: Coordinate(int x, int y) : _x(x), _y(y) { std::cout << "Coordinate(int, int) 被调用" << std::endl; } private: int _x, _y; }; int main() { // 使用花括号进行多参数隐式转换 (C++11) Coordinate c = {10, 20}; // 同样,如果你在构造函数前加了 explicit,上面这行就会报错 return 0; } ``` *** ** * ** *** ## 💻结尾--- 核心连接协议 **警告:** 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠 *** ** * ** *** **【📡】 建立深度链接:** **关注**本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。 **【⚡】 能量过载分发:** 执行**点赞**操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。 **【💾】 离线缓存核心:** 将本页加入**收藏**。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。 **【💬】 协议加密解密:** 在**评论区**留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。 **【🛰️】 信号频率投票:** 通过**投票**发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。 *** ** * ** *** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57b03915c54b43a7a03fa92dbbfe57c3.gif) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0905dc972de8414bb602715de3f866ee.gif)

相关推荐
wula19941 小时前
C# Revit二次开发 地层工程量统计
开发语言·c#
范特西.i1 小时前
QT聊天项目(4)
开发语言·qt
lly2024061 小时前
PostgreSQL DELETE 操作详解
开发语言
今天你TLE了吗2 小时前
JVM学习笔记:第二章——类加载子系统
java·开发语言·jvm·笔记
AutumnorLiuu2 小时前
C++并发编程学习(四)——死锁及其预防
开发语言·c++·学习
eWidget2 小时前
核心业务系统国产化:如何破解 Oracle 迁移中的“重构代价”与“性能瓶颈”?
数据库·oracle·重构·kingbase·数据库平替用金仓·金仓数据库
元让_vincent2 小时前
DailyCoding C++ CMake | CMake 踩坑记:解决 ROS 项目中的“循环引用”与库链接依赖问题
c++·机器人·ros·动态库·静态库·cmake·循环引用
_OP_CHEN2 小时前
【前端开发之JavaScript】(二)JS基础语法上篇:吃透变量 / 类型 / 输入输出
开发语言·javascript·html·ecmascript·前端开发·网页开发
Maguyusi2 小时前
go 批量生成 c++与lua的proto文件
开发语言·后端·golang·protobuf