C++ 类与对象(二)(1.构造析构函数)
目录类的默认成员函数构造析构函数1.构造函数2.拷贝构造函数3.析构函数类的默认成员函数在书写构造类的时候除了我们所写的成员函数之外如果没有编写对应的默认函数编译器会默认生成对应的6个默认函数比较重要的前4个函数。补充在C11以后多了2个默认函数移动构造和移值构造为什么要写默认成员函数原因编译器的提供的默认成员函数对于我们程序员来说可能不是想要的不同情况编译器提供的默认成员函数不适配需要进行修改。构造析构函数1.构造函数在原先用C语言写Stack等数据结构中每次都需要Init函数来进行初始化在每次都有可能我们忘记进行初始化导致系统报错的可能所以在C中构造函数就为了解决这个问题的在每次实例化对象的时候都会进行调用构造函数进行初始化。构造函数的特点及要求函数名与类名同名。无返回值。在C 中构造函数可以不用写void对象实例化后自动调用构造函数。构造函数可以重载遵循重载规则。用户没有构造函数编译器自动生成如果有就不会生成就用用户自己的构造函数。无参构造或者、全缺省构造函、编译自动生成的构造函数都叫构造函数。三个函数只能存在一个不能同时出现。前两存在的时候会导致无参和缺省构造导致分歧。日期类的构造函数全缺省写法//Date.h #pragma once #include iostream #include stdlib.h #include stdbool.h #include assert.h using namespace std; class Date { public: Date(int year 1, int month 1, int day 1); void Print(); private: int _year; int _month; int _day; };//Date.cpp #define _CRT_SECURE_NO_WARNINGS #include Data.h Date::Date(int year, int month, int day) { _year year; _month month; _day day; } void Date::Print() { cout _year / _month / _day endl; } int main() { Date adt(2026, 8, 8); adt.Print(); return 0; }无参和带参写法Date() { _year 1; _month 1; _day 1; } Date(int year, int month, int day) { _year year; _month month; _day day; }很明显的看到全缺省的优势就体现出来了而却这种带参写法还是有问题如果只写年份不写其他的内容一样会导致报错。2.拷贝构造函数定义如果已经有一个相同类的实例化对象可以通过拷贝该对象实例化一个所以成员变量一致的对象这就是拷贝构造函数也就是是一个特殊的狗制造函数。拷贝构造函数要求及其特点拷贝构造函数是构造函数的重载。拷贝构造函数必须第一个类型是类类型的对象的引用如果使用的是类类型会导无限递归报错拷贝构造函数也可以多个参数但第一个一定是类类型的引用后面必须有缺省参数。C规定了自定义类型对象进行时必须用拷贝构造所以这里的自定义类型传参值和返回值都会调用拷贝构造完成。若没有拷贝构造函数编译器也会自动生成对于的拷贝构造函数。与我们所写的拷贝构造不同编译器默认拷贝构造是通过一个字节一个字节经行的拷贝。学习拷贝构造的原因像Date 类这种内存偏简单的类编译器默认的拷贝构造就够用但是 Stack 栈这种需要申请空间等复杂的内容编译器生成的默认拷贝构造就不能满足我们的需求所以需要自定义拷贝构造自己需要自己搞。为什么要拷贝构一定第一个是类类型的应用传值会产生临时对象调用拷贝构造传值引用返回返回的是返回对象的别名应用没有产生拷贝。Data::Data(const Data data) { _year data._year; _month data._month; _day data._day; } Date::Date(const Date* d) { _year d-_year; _month d-_month; _day d-_day; }3.析构函数析构函数就是在实例化对象在生命周期末的时候会调用通常析构函数会使用在空间销毁上像Stack栈的空间释放就可以使用到析构函数代替Destory函数的作用防止在我们忘记对空间释放时自动调用与构造函数的特点一致除了只会在生命周期结束时会使用也不需要 void 做返回值与构造不同就是在原先类名之前加一个“ ~ ”。Date::~Date() { //... };typedef int STDataType; class Stack { public: // 构造函数 Stack(int n 4) { _a (STDataType*)malloc(sizeof(STDataType) * n); if (nullptr _a) { perror(malloc); exit(1); } _capacity n; _top 0; } // 拷贝构造函数 Stack(Stack s) { _a (STDataType*)malloc(sizeof(STDataType) * s._capacity); if (nullptr _a) { perror(malloc); exit(1);; } memcpy(_a,s._a,sizeof(STDataType)*s._top); _capacity s._capacity; _top s.top; } // 析构函数 ~Stack() { cout ~Stack() endl; free(_a); _a nullptr; _top _capacity 0; } private: STDataType* _a; // 动态数组 size_t _capacity; // 容量 size_t _top; // 栈顶下标0代表空栈 };析构函数调用顺序在初始化多个实例化对象析构函数的调用也是有顺序的析构函数调用顺序类似栈会先调用最后实例化对象。

相关新闻

戴尔灵越14R拆机清灰与SSD升级全攻略:从工具准备到BIOS设置

戴尔灵越14R拆机清灰与SSD升级全攻略:从工具准备到BIOS设置

1. 项目缘起与机型背景手头这台戴尔灵越14R,型号后缀是A6-4400M,算是我经手过的一台“老伙计”了。它大概在2012年左右上市,属于当年灵越系列里比较主流的一款家用娱乐本。这台机器到我手里时,状态已经不太好了,风扇噪…

2026/8/16 22:36:16 阅读更多 →
Linux性能优化工具系列详解(1)

Linux性能优化工具系列详解(1)

本系列内容参考:极客时间 —— 倪朋飞 《Linux性能优化实战》特此致谢!序言Linux系统性能优化,是基于Linux操作系统软硬件全栈,通过监控定位瓶颈、调整内核参数、优化调度/存储/网络、调整应用架构、合理分配硬件资源等手段&#…

2026/8/16 22:35:16 阅读更多 →
Spring AI Alibaba 入门开发1-环境搭建、ollama部署、Chat和ChatModel、流式输出

Spring AI Alibaba 入门开发1-环境搭建、ollama部署、Chat和ChatModel、流式输出

目录 一、准备工作 二、HelloWorld 2.1 项目结构 2.2 创建父工程 2.3 创建子模块——ssa-01-HelloWorld 三、微服务调用本地大模型-本章可跳过 3.1 准备工作 系统与硬件要求 本地部署大模型配置推荐列表 3.2 开发调用本地大模型 四、ChatModel和ChatClient 4.1 Cha…

2026/8/16 22:35:16 阅读更多 →

最新新闻

Linux系统安装Docker Compose:二进制与pip方式详解与避坑指南

Linux系统安装Docker Compose:二进制与pip方式详解与避坑指南

1. 项目概述:为什么我们需要关注Docker Compose的安装方式? 在Linux环境下部署和管理容器化应用,Docker Compose几乎是一个绕不开的工具。它通过一个简单的YAML文件,就能定义和运行多容器的Docker应用,极大地简化了从开…

2026/8/16 23:14:38 阅读更多 →
HarmonyOS HAR开发全攻略:从模块打包到工程化实践

HarmonyOS HAR开发全攻略:从模块打包到工程化实践

1. 从“模块”到“积木”:理解HarmonyOS HAR的价值 在HarmonyOS应用开发中,尤其是当项目规模逐渐增大、团队协作成为常态时,一个绕不开的话题就是代码和资源的复用与共享。想象一下,你开发了一个非常精美的自定义弹窗组件&#xf…

2026/8/16 23:14:38 阅读更多 →
分支和循环语句

分支和循环语句

C语言有顺序结构、选择结构、循环结构 1. if语句 1.1 if....else..... C语言中0为真&#xff0c;非0为假。 “”赋值 “”判断相等 例&#xff1a;输入一个整数&#xff0c;判断奇偶数 #include<stdio.h> int main() { int n0; scanf("%d",&n)…

2026/8/16 23:14:38 阅读更多 →
数据结构基础篇(一):时间与空间复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘

数据结构基础篇(一):时间与空间复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘

从“能跑就行”到“会算复杂度”&#xff1a;时间/空间复杂度 两道力扣练习 二分查找复盘 本文涉及的练习代码已经同步到 Gitee&#xff1a;数据结构/数据结构练习一&#xff08;复杂度模块&#xff09; Luminous/Code_2026 - 码云 - 开源中国 一、写在前面&#xff1a;代码…

2026/8/16 23:14:38 阅读更多 →
《断网不丢日志,多机共享工单:高速龙门贴片机实战沉淀 SQLite + MySQL 双库分层架构实战-无硬件 Mock 可直接运行》

《断网不丢日志,多机共享工单:高速龙门贴片机实战沉淀 SQLite + MySQL 双库分层架构实战-无硬件 Mock 可直接运行》

前言 原单库版本拆分双存储职责,适配业务需求 上面的可视化架构图帮你快速理解整个设计的核心思路: 一句话总结:把"容易丢、要速度"的日志交给本地 SQLite,把"要共享、要统计"的工单交给服务端 MySQL,两者通过 Service 接口层 完全解耦,ViewModel …

2026/8/16 23:14:38 阅读更多 →
Docker Compose安装指南:二进制与pip方式详解及避坑实践

Docker Compose安装指南:二进制与pip方式详解及避坑实践

1. 为什么你需要关心docker-compose的安装方式&#xff1f; 如果你在Linux上折腾过Docker&#xff0c;大概率会遇到一个场景&#xff1a;你写好了一堆 docker run 命令&#xff0c;或者一个复杂的服务栈需要多个容器协同工作&#xff0c;每次启动都要手动敲一遍&#xff0c;…

2026/8/16 23:13:37 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →