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

C++基础学习:深入理解类中的构造函数、析构函数、this指针与new关键字

前言

在C++面向对象编程中,类是构建复杂程序的基本单元。今天,我们将深入探讨类中的几个核心概念:构造函数、析构函数、this指针以及new关键字。这些概念对于理解C++对象生命周期和内存管理至关重要。

1. 构造函数

构造函数是类的一个特殊成员函数,用于在创建对象时初始化对象的状态。每当一个类的对象被创建时,构造函数会被自动调用。构造函数没有返回类型,并且其名称与类名相同。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}private:int speed;std::string color;
};int main() {Car myCar(120, "Red"); // 创建Car对象时调用构造函数return 0;
}

在这个例子中,Car类的构造函数接受两个参数:speedcolor,用于初始化对象的属性。

2. 析构函数

与构造函数相对应,析构函数是类的一个特殊成员函数,用于在对象生命周期结束时执行清理操作。析构函数没有返回类型,也没有参数,其名称与类名相同,但在前面加上波浪号(~)。析构函数在对象销毁时自动调用,比如对象超出作用域或被显式删除时。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}~Car() {std::cout << "Car object destroyed." << std::endl;}private:int speed;std::string color;
};int main() {{Car myCar(120, "Red"); // 创建Car对象} // myCar对象超出作用域,析构函数被调用return 0;
}

在这个例子中,当myCar对象超出其作用域时,析构函数被自动调用,输出一条消息。

3. this指针

this指针是一个隐式传递给每个非静态成员函数的指针,它指向调用该函数的对象。this指针在类内部用于访问对象的成员变量和成员函数,特别是在成员变量名与函数参数名相同时非常有用。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed; // 使用this指针区分成员变量和参数this->color = color;}void display() {std::cout << "Speed: " << this->speed << ", Color: " << this->color << std::endl;}private:int speed;std::string color;
};int main() {Car myCar(120, "Red");myCar.display(); // 输出: Speed: 120, Color: Redreturn 0;
}

在这个例子中,this指针用于在构造函数和display方法中区分成员变量和函数参数。

4. new关键字

new关键字用于在堆上动态分配内存,并返回指向该内存的指针。与栈上分配的内存不同,堆上分配的内存需要显式释放,以避免内存泄漏。new通常与delete关键字配对使用,delete用于释放由new分配的内存。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}~Car() {std::cout << "Car object destroyed." << std::endl;}void display() {std::cout << "Speed: " << this->speed << ", Color: " << this->color << std::endl;}private:int speed;std::string color;
};int main() {Car* myCar = new Car(120, "Red"); // 在堆上分配Car对象myCar->display(); // 输出: Speed: 120, Color: Reddelete myCar; // 释放内存,调用析构函数return 0;
}

在这个例子中,new关键字用于在堆上分配一个Car对象,并返回指向该对象的指针。使用delete关键字释放内存时,析构函数被自动调用。

总结

构造函数、析构函数、this指针和new关键字是C++面向对象编程中的核心概念。构造函数用于初始化对象,析构函数用于清理对象,this指针用于在类内部访问对象成员,而new关键字用于在堆上动态分配内存。理解这些概念对于编写高效、可靠的C++程序至关重要。

http://www.xdnf.cn/news/963001.html

相关文章:

  • JWT令牌如何在FastAPI中实现安全又高效的生成与验证?
  • 解锁数据库简洁之道:FastAPI与SQLModel实战指南
  • 1.2 git使用
  • 小程序中的状态管理库-mobx-miniprogram
  • 【深尚想】SX1276IMLTRT LoRa射频收发器芯片 物联网 电子元器件解析
  • 在鸿蒙HarmonyOS 5中实现抖音风格的草稿箱功能
  • Kafka 的容错与持久性:副本复制机制的工作原理与实践
  • 实现安全、经济、节约、环保的智慧交通开源了
  • JBank:Jucoin 推出的 Web3 去中心化自托管银行金融协议
  • error: Sandbox: rsync(17136) deny(1) file-write-create
  • 汽车生产虚拟实训中的技能提升与生产优化​
  • 机器学习的可解释性
  • 项目课题——智能花盆系统设计
  • “机器学习中的‘Hello World‘:为什么我们总用MNIST数据集,以及何时该放弃它“
  • 机器学习中的优化问题描述
  • 在多云环境透析连接ngx_stream_proxy_protocol_vendor_module
  • ffmpeg 新版本转码设置帧率上限
  • 搭建gitlab ci/cd runner实现对c++项目的自动编译和打包
  • 51c嵌入式※~电路~合集32~PWM
  • 入门机器学习需要的统计基础
  • ArcGIS+AI:涵盖AI大模型应用、ArcGIS功能详解、Prompt技巧、AI助力的数据处理、空间分析、遥感分析、二次开发及综合应用等
  • 置信水平、置信区间
  • ArcGIS土地利用数据制备、分析及基于FLUS模型土地利用预测技术应用
  • 在Windows上搭建Kubernetes集群
  • 渗透靶场PortSwigger Labs指南:规范链接的反射XSS
  • Docker监控服务部署
  • 如何提升企微CRM系统数据的准确性?5大核心策略详解
  • 鹰盾加密器基于AI的视频个性化压缩技术深度解析:从智能分析到无损压缩实践
  • 鹰盾加密器的超混沌加密原理深度解析:从理论基础到视频应用
  • AWS WebRTC 使用SDK-C demo 实现master推流和viewer拉流