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

构造函数与析构函数

构造函数与析构函数

何为构造函数?

就像我们操作的对象和我们人一样,需要经历“出生”这一阶段,在初始设定时就设定默认参数的函数

使用方式

构造函数与类同名,并且没有返回值,没有参数类型,并且定义在类的public域内,自调用类起自动调用,无法在外部重复调用
构造函数可以重载
下面是students类的构造函数使用示例

#include<iostream>using namespace std;
class students {
private: int	ID;string name;
public:students() {ID = 1;name = "张三";cout << "自动初始化成功!" << endl << "姓名:" << name << endl << "学号:" << ID<<endl;}students(int a1,string name1):ID(a1),name(name1){       //冒号后为参数列表,这是构造函数独特的初始化方式cout<<"手动初始化成功!"<< endl << "姓名:" << name << endl << "学号:" << ID<<endl;}void showInfo() { // 普通函数:有返回值(void)、自定义名cout << "姓名:" << name << ",学号:" << ID << endl;}
};int main() {students a;a.showInfo();students s2(20, "李四"); // 传入参数,自定义初始状态s2.showInfo();
}

输出

自动初始化成功!
姓名:张三
学号:1
姓名:张三,学号:1
手动初始化成功!
姓名:李四
学号:20
姓名:李四,学号:20

什么是析构函数

那么既然构造函数作为出生,那么析构函数就对应着“死亡”

使用方式

析构函数一般会在类结束调用之后自动执行,主要为清空变量及其初始化,但是如果创建的是动态内存,动用了堆区,那么就需要手动delete,不然空间会被浪费
如果需要创建,那么为了和构造函数区分,名字还是一样,不过要在前面加一个“~”
具体看如下MyString类的示例

#include<iostream>
#include<string>
using namespace std;class MyString {
private:char* str; // 指针成员,指向动态内存(必须手动析构释放)
public:MyString(const char* s) {if (s == nullptr) {str = new char[1]; *str = '\0';}else {int len = strlen(s);str = new char[len + 1]; // 为\0预留空间strcpy(str, s); }cout << "构造函数:申请动态内存,字符串=" << str << endl;}// 必须手动定义析构函数:释放new的动态内存~MyString() {delete[] str;cout << "析构函数:释放了动态内存!" << endl;}void print() {cout << "字符串内容:" << str << endl;}
};int main() {MyString ms("Hello 析构函数");ms.print();return 0;
}

输出

构造函数:申请动态内存,字符串=Hello 析构函数
字符串内容:Hello 析构函数
析构函数:释放了动态内存!
http://www.jsqmd.com/news/329891/

相关文章:

  • AUTOSAR 术语中英日语对照表 - ukyo-
  • 揭秘!权威AI数学课程TOP5,选对课开启孩子数学天赋
  • love2dAPI文档
  • 2026历史文旅研学红黑榜|教育博主亲测,这几家闭眼冲!
  • 计算机毕业设计springboot付费自习室管理小程序 基于SpringBoot的共享自习室预约运营平台 微信小程序驱动的付费学习空间智能管理系统
  • Java 中 CAS 的底层实现与 Unsafe 类解析
  • 2026中小学英语学习新“视”界:AI课程大揭秘
  • Anthropic研究团队发现:AI助手可能正在悄悄削弱我们的学习能力
  • QuantaAlpha发布EvoFSM:让AI研究助手学会自我进化的新框架
  • 格式总出错?AI论文写作软件 千笔AI VS 云笔AI,自考党必备神器!
  • 计算机毕业设计springboot山西工程技术学院学生请假管理系统的设计与实现 基于SpringBoot的山西工程职院学生请销假一体化平台研发 山西工程技术学院智慧假勤Saas系统
  • 导师推荐10个降AIGC平台 千笔助你轻松降AI率
  • 纽约大学阿布扎比分校团队破解AI大模型训练难题
  • 零基础AI英语学习新选择:2026深耕者复盘,开口逆袭超简单!
  • 柏林工业大学研究揭露:AI的“人格面具“竟然让人工智能更偏见
  • 导师又让重写?AI论文平台 千笔AI VS speedai,MBA写作新选择!
  • 倾听数据的声音:给数据分析初学者的温馨建议
  • 最新靠谱大润发购物卡回收平台盘点
  • 英伟达团队发布FP8-RL:让AI对话训练快44%的“压缩魔法“
  • 导师严选 9个AI论文平台:继续教育必备!毕业论文+科研写作全测评
  • SpringCRUD遇到的错误及其修正
  • ETH苏黎世等顶级机构联合攻关:AI自我纠错新突破
  • Java毕设项目推荐-基于java的大学生心理测评与分析系统基于SpringBoot的大学生心理测评与分析系统【附源码+文档,调试定制服务】
  • 顺境逆境皆可为,高手都在混搭中
  • 完整教程:【开题答辩实录分享】以《智慧工地管理服务系统》为例进行答辩实录分享
  • 腾讯AI实验室发布超越传统训练的强化学习新方法
  • RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别? - 教程
  • AI不再只会“鹦鹉学舌“了——凯斯西储大学让机器变身“逻辑侦探“
  • 锦程物流item_get - 获取详情接口对接全攻略:从入门到精通
  • 实测对比后 10个AI论文写作软件:专科生毕业论文+开题报告高效写作工具推荐