当前位置: 首页 > news >正文

C++在类的构造函数中调用另一个构造函数

前言:

为了避免函数代码的重复,我们经常会遇到需要在一个构造函数中调用另一个函数的场景。

错误写法:

class MyClass {
public:MyClass(int x) {value = x;printf("Constructor A: %d\n", value);}MyClass() {// ❌ 错误:试图在函数体内调用另一个构造函数MyClass(42);  // 这实际上是在函数体内创建了一个临时对象,不是委托!printf("Constructor B\n");}private:int value;
};

说明: 这里的MyClass(42)实际是构造了一个临时对象,当MyClass()完成退出时这个临时对象就会被销毁,就会调用MyClass的析构函数。而MyClass()中的原本需要构造的this对象并不会调用构造函数MyClass(42)。

正确写法:(使用委托函数)

class MyClass {
public:// 构造函数 AMyClass(int x) {// 初始化逻辑 Avalue = x;printf("Constructor A: %d\n", value);}// 构造函数 B,委托给构造函数 AMyClass() : MyClass(42) {  // ✅ 委托给 MyClass(int)printf("Constructor B (default)\n");}private:int value;
};

上面实现的实际运行结果:

int main() {MyClass a;     // 调用默认构造函数 MyClass() → 委托给 MyClass(42)MyClass b(10); // 调用 MyClass(int x)return 0;
}------------------------------
实际输出:
Constructor A: 42
Constructor B (default)
Constructor A: 10

http://www.dtcms.com/a/309802.html

相关文章:

  • STM32CubeIDE新建项目过程记录备忘(四)EXTI外部中断
  • 网络编程-加密算法
  • Spring Boot 异步执行方式全解析:@Async、CompletableFuture 与 TaskExecutor 对比
  • 面试题:怎么理解 OSI 参考模型(开放式系统互联参考模型) 和 TCP/IP 模型(传输控制协议 / 网际协议模型 )
  • Node.js中Buffer的用法
  • Linux中Docker Swarm介绍和使用
  • 数据结构学习基础和从包装类缓存到泛型擦除的避坑指南
  • QT初入门-界面设置
  • Metamorph、LlamaFusion、MetaQuery论文解读
  • Linux的对称多处理(SMP)机制
  • embodied复现所需docker环境配置粗略流程
  • CentOS7下同步时间的几种方式(NTP 、Chrony和systemd-timesyncd)
  • 2025年08月01日Github流行趋势
  • 注解退散!纯XML打造MyBatis持久层的终极形态
  • OCR、文档解析工具合集
  • C++ 前缀和、双指针
  • [位运算]2411. 按位或最大的最小子数组长度
  • 下载一个JeecgBoot-master项目 导入idea需要什么操作启动项目
  • 26数据结构-顺序表
  • SpringMVC RESTful 核心要点
  • Excel数据转化为Xmind思维导图全流程(含Word转化格式),实用
  • hadoop.yarn 带时间的LRU 延迟删除
  • 如何在 Mac OS 上安装 Cursor
  • 2025 腾讯广告算法大赛 Baseline 项目解析
  • Python - 数据分析三剑客之Matplotlib
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
  • 从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门
  • AI 重塑软件产业:从技术革命到生态重构
  • 超聚变:智能体时代,AI原生重构城企数智化基因