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

C++构造函数和析构函数

C++构造函数和析构函数

  C++的构造函数和析构函数是类的特殊成员函数,用于对象的创建和销毁,分别在对象的生命周期开始和结束时自动调用。它们的使用对资源管理和对象的初始化/清理至关重要。


1. 构造函数

定义
  • 构造函数在对象创建时自动调用,用于初始化对象的数据成员。
  • 构造函数的名字与类名相同,没有返回值。
特点
  1. 无返回值(即使写void也会报错)。
  2. 可以重载:支持多个构造函数,通过参数列表区分。
  3. 默认构造函数:如果没有定义构造函数,编译器会生成一个默认构造函数。
  4. 隐式调用与显式调用:构造函数可以通过隐式或显式方式调用。
语法
class MyClass {
public:MyClass() { // 默认构造函数std::cout << "Default Constructor called!" << std::endl;}MyClass(int x) { // 参数化构造函数std::cout << "Parameterized Constructor called with value " << x << std::endl;}
};int main() {MyClass obj1;        // 调用默认构造函数MyClass obj2(10);    // 调用参数化构造函数MyClass obj3 = MyClass(20); // 显式调用构造函数return 0;
}
类型
  1. 默认构造函数
    • 无参数或所有参数都有默认值。
    MyClass() {}
    
  2. 参数化构造函数
    • 带参数,用于灵活初始化对象。
    MyClass(int x, int y) {}
    
  3. 拷贝构造函数
    • 通过同类型对象初始化新对象,参数是同类的引用。
    MyClass(const MyClass& obj) {}
    
  4. 移动构造函数
    • 用右值引用初始化对象,提升性能。
    MyClass(MyClass&& obj) noexcept {}
    
  5. 委托构造函数(C++11)
    • 一个构造函数调用另一个构造函数。
    MyClass() : MyClass(0) {}
    
初始化列表

  构造函数使用初始化列表可以高效地初始化数据成员,特别是常量、引用类型或需要自定义构造的成员。

  • 成员变量的初始化顺序与它们在类中声明的顺序一致,而不是在初始化列表中出现的顺序。即使在初始化列表中以不同顺序指定初始化,成员变量的初始化仍按照它们在类中的声明顺序进行。
  • const 成员变量必须在对象构造时初始化,因为它们一旦初始化后就不能被修改。由于这种特性,const 成员变量的初始化只能通过构造函数的初始化列表实现,不能在构造函数体内赋值。
class 
http://www.dtcms.com/a/208567.html

相关文章:

  • 【2025最新】下载安装Anaconda
  • 数据共享中的库表交换怎么做?
  • 二、OpenCV图像处理-几何变换
  • 【CSS border-image】图片边框拉伸不变形,css边框属性,用图片打造个性化边框
  • Docker 与 Kubernetes 部署 RabbitMQ 集群(一)
  • el-table控制type=“expand“展开列 根据条件显示或隐藏展开按钮
  • 什么是DAQ采集卡?它的优势有哪些?
  • 【PINN】DeepXDE学习训练营(32)——pinn_forward-fractional_diffusion_1d.py
  • ES6 新增 API 方法
  • 【通用智能体】Intelligent Internet Agent (II-Agent):面向复杂网络任务的智能体系统深度解析
  • Go语言中为什么map、slice、channel需要var之后还要make一下?
  • Excel多合一文件合并工具
  • QGIS如何打开 ARCGIS的mxd工程文件
  • 怎么判断一个Android APP使用了React Native 这个跨端框架
  • ArcGIS Pro对图斑进行等比例、等面积、等宽度的分割
  • vue 中的v-once
  • 集群、容器云与裸金属服务器的全面对比分析
  • 图形推理_
  • [数据集]无人机视角检测分割数据集合集
  • 【新品来袭】功耗降低56%爱普生研发新款晶体振荡器
  • 京东外卖分润系统部署实操!0门槛入驻+全平台接入+自定义比例...这些人,赚翻了!
  • (万字长文)Django数据库操作——ORM:数据交互显示前端网页
  • OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容
  • 07_分类器不确定评估
  • 「短剧系统开发」定制化技术架构|高并发微服务 + AI 推荐,快速搭建流量级短剧平台
  • JMeter-SSE响应数据自动化
  • SpringBoot-10-SpringBoot结合MyBatis操作mysql并提供web服务
  • 李宏毅《深度学习》:Self-attention 自注意力机制
  • [Datagear] 实现按月颗粒度选择日期的方案
  • 目前,Navicat 17.1 版本的用户管理功能无法使用,如何回退到上一个版本?关于之前提到的转置功能?