dedecms关闭网站网站域名根目录

bicheng/2026/1/24 1:55:00/文章来源:
dedecms关闭网站,网站域名根目录,创新的常州网站建设,建筑招聘网官网C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有#xff0c;那么这个类就是一个空类。…C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有那么这个类就是一个空类。但是任何类如果什么都不写的话编译器会自动生成6个默认成员函数 默认成员函数用户没有显式实现用户没有写编译器自动生成的成员函数被称为默认成员函数 class Data{};2. 构造函数 2.1 概念 假设有以下类 #include iostream using namespace std; class Date { public:void Init(int year 2024, int month 4, int day 15){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year;int _month;int _day; };int main() {Date d1;d1.Init();d1.Print();Date d2;d2.Init(2024, 5, 1);d2.Print();return 0; }上述类中是使用Init函数对类进行初始化Init使用全缺省参数如果没有传值的话使用缺省值初始化但是对于这这种类就算不初始化也不会有什么问题但是对于顺序表链表等如果不初始化就会报错往往我们会容易忘记调用初始化这时候构造函数就派上用场了 构造函数是一种特殊的函数名字与类名相同没有返回值在默认成员函数中没有返回值指的都是不写在创建类对象时由编译器自动调用保证每个成员都有一个初始值并且在类对象整个生命周期只会调用一次 2.2 特性 构造函数是一种特殊的函数构造函数并不是用于开辟空间创建对象而是为对象进行初始化 特征 函数名与类名相同函数没有返回值不写返回值对象实例化时编译器会自动调用构造函数可以重载可以根据需求写多个初始化方式如果类中没有显式定义构造函数没有写编译器就会自动生成一个无参的构造函数反之编译器则不会生成由编译器生成的无参构造函数,不会对类中的内置类型int char等等进行处理但是对调用类中自定类型class struct union等等的构造函数如果类中自定类型还是没有则也不处理 C中没有规定对自定类型class struct union等等初始化成0或者其他取决于编译器的实现无参构造函数和全缺省的构造函数由编译器自动生成构造函数都可以被称为默认参构造函数但是默认参构造函数只能存在一个 示例1: #include iostream using namespace std; class Date { public://Date(int year, int month, int day) 这种写法会报错这种不是默认的构造函数Date(int year 2024, int month 4, int day 15){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year;int _month;int _day; };int main() {Date d1;//调用全缺省的构造函数2024-4-15d1.Print();return 0; }示例2 #include iostream using namespace std; class Time { private:int _hour;int _minute;int _second; }; class Date { public:void Print(){cout _year - _month - _day endl;} private:int _year;int _month;int _day;Time a; };int main() {Date d1;d1.Print();return 0; }示例3 #include iostream using namespace std; class Date { public:Date(){}Date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year;int _month;int _day; };int main() {Date d1;d1.Print();return 0; }存在多个构造函数报错 2.3 补丁 由于不对内置类型进行初始化所以在C 11中打了一个补丁允许内置成员在声明时可以给一个默认值 #include iostream using namespace std; class Date { public:void Print(){cout _year - _month - _day endl;} private:int _year 2024;int _month 4;int _day 15; };int main() {Date d1;d1.Print();return 0; }用声明时的默认值初始化2024-4-15 总结 一般情况下构造函数都要由我们自己实现少部分情况下可以不用实现如果类中只有自定类型而这个自定类型内部存在构造函数例如MyQueue 3. 析构函数 3.1 概念 析构函数是与构造函数相反的一种特殊函数析构函数不是对对象进行销毁局部变量的销毁是由编译器处理的而是析构函数是对对象中资源的清理且会在对象销毁时自动调用 3.2 特性 在类名前面加上~无参数无返回值不写返回值一个类只有一个析构函数如果没有显式定义没有写则编译器会自动生成默认析构函数由于没有参数析构函数不能重载在对象生命周期结束时编译器会自动调用析构函数与构造函数相似的是析构函数不会对内置类型进行处理对自定类型则是调用其析构函数 示例 #include iostream using namespace std; class Stack { public:Stack(int n 4){cout Stack() endl;int* tmp (int*)malloc(sizeof(int) * n);if (nullptr tmp){perror(malloc fail);return;}_arr tmp;_capacity n;_size 0;}void Push(int x){//扩容_arr[_size] x;_size;}~Stack(){cout ~Stack() endl; //方便查看if (_arr) //防止被多次销毁加个判断{free(_arr);_arr nullptr;_capacity 0;_size 0;}} private:int* _arr;int _size;int _capacity; }; int main() {Stack s;s.Push(1);s.Push(2);s.Push(3);s.~Stack();return 0; }析构函数也是可以显式调用的 3.3 总结 在没有需要资源清理的时候可以不写析构函数 a. 如Date类没有需要清理的内置类型 b.没有需要清理的内置类型剩下的其他自定类型中存在析构函数如MyQueue也不需要写析构函数 2.有资源清理就要写析构函数如StackList 4. 拷贝构造函数 4.1 概念 拷贝构造函数只有一个形参该形参为本类型对象的引用一般会使用const修饰在用已经存在的类类型对象时创建新对象时会由编译器自动调用 4.2 特性 是构造函数的一种重载形式函数名与类型一致拷贝构造函数的参数只能有一个且得是类类型对象的引用否则在使用拷贝构造函数会直接报错引发无穷递归调用如果没有显式定义编译器会自动生成默认的拷贝构造函数默认的拷贝构造函数会对内置类型进行处理按内存存储按字节序完成拷贝也被称为浅拷贝或者值拷贝 示例1 #include iostream using namespace std; class Date { public:Date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}void Init(int year 2024, int month 4, int day 15){_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year;int _month;int _day; };int main() {Date d1(2024,4,15);Date d2 d1; //与下面创建对象d3是等价的两种写法d2.Print();Date d3(d1);d3.Print();return 0; }示例2 #include iostream using namespace std; class Stack { public:Stack(int n 4){cout Stack() endl;int* tmp (int*)malloc(sizeof(int) * n);if (nullptr tmp){perror(malloc fail);return;}_arr tmp;_capacity n;_size 0;}void Push(int x){//扩容_arr[_size] x;_size;}~Stack(){cout ~Stack() endl;if (_arr){free(_arr);_arr nullptr;_capacity 0;_size 0;}} private:int* _arr;int _size;int _capacity; }; int main() {Stack s1;s1.Push(1);s1.Push(2);s1.Push(3);Stack s2 s1;return 0; }代码运行结果 报错 编译器生成的默认拷贝构造是不够用在上述代码中s2对象使用s1对象的拷贝由于是浅拷贝会将s1中的内容原封不动的拷贝给s2因此s1和s2调用的是同一块空间在调用析构函数时s1将空间释放了但是s2中存放的还是s1的空间因为还会再释放一次一块内存空间的多次释放会造成程序奔溃。同时在对任意一个栈中push数据的时候另一个栈中的size是不会加的但是共用的是同一块空间数据丢失等等问题 示例3错误写法 #include iostream using namespace std; class Date { public:Date(int year 1, int month 1, int day 1){_year year;_month month;_day day;}Date(Date d) //错误写法 会引发无穷递归{_year d._year;_month d._month;_day d._day;} private:int _year;int _month;int _day; };Date Func(Date d) {Date tmp(d);return tmp; }int main() {Date d1(2024, 4, 15);Func(d1);return 0; }在返回一个局部变量时由于局部变量出作用域就销毁了所以会将局部变量拷贝给一个临时变量在给拷贝给临时变量时又会调用拷贝构造函数在调用拷贝构造函数时又会将返回值拷贝给一个临时变量造成无穷递归 4.3 总结 在类中如果没有涉及需要资源管理的内置类型是可以不写拷贝构造函数的编译器自动生成的浅拷贝就够用但是一旦涉及就需要自己实现拷贝构造函数了拷贝构造函数的参数只有一个且必须是类类型对象的引用使用传值方式编译器直接报错因为会引发无穷递归调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设 上海网站特种作业证查询入口

问题背景: 最近入手了百问网的全志T113-Pro,用Emmc启动发现一张32GB的SD卡在烧录了百问网镜像 100ask-t113-pro_sdcard.img 的系统后,仅有200多M的存储空间。第一时间上百问网论坛看是否有板友也出现类似情况,发现了一个帖子正是描…

展览会建设网站平台的作用网站基本架构设计的主要步骤

想要搞 all in beng 就得到靠虚拟机了主流就是pve和esxi 其中我认为esxi>pve的 esxi不能使用emmc储存因为无法识别 esxi6.7以上时不支持螃蟹卡的所以想要新的esxi8.0就可能要换网卡,或者就安装6.7 esxi有很多已经封装好网卡驱动和 NVMe 驱动的镜像,如有需要可以自行百度,问我…

网站建设 朝阳区wordpress玩法

操作符分类: 算数操作符: - * / % //算数操作符 // int main() // { // // /除法 1.整数除法(除号两端都是整数) 2浮点数除法,除号的两端只要有一个小数就执行小数除法 // // 除法中,除数为0 // int a 7 / 2; /…

织梦做不了视频网站可以做视频剪辑兼职的网站

一. 需求 ⏹有一段文本,文本一共有7列。这7列文本之间的分隔符不相同 有一个空格的有多个空格的有Tab的jmw_state 和 method 之间用 & 连接 现在要求,将这段文本粘贴到Excel中,进行分列。并且需要将 jmw_state 和 method 也进行分列 也…

你做我评网站会自动查论文相似度吗合肥网页制作设计

最近在学习Asp.Net MVC, 一直是step by step地看官方文档。 想找个成熟的MVC开发的开源系统,系统学习一下MVC, 搜索了一下,惊喜的发现了Orchard. 这个是介绍 2011/01/21号发布的关于Orchard的介绍,说明Orchard还是一个非常新鲜的事物。以后会…

精品课网站建设 辽宁pc网站建设企业

event 对象 1 ) 概述 在生产事件对象的过程当中,要去调用每一个 possiblePlugin.extractEvents 方法现在单独看下这里面的细节过程,即如何去生产这个事件对象的过程 2 )源码 定位到 packages/events/EventPluginHub.js#L172 f…

做机械产品用什么网站地产项目网站

随着仓储物流和电商行业的快速发展,自动化立库设备的技术不断完善。“货到人”拣选技术越来越受到行业的重视,且已逐渐成为供需双方关注的焦点。“货到人”拣选系统主要由储存系统,补货系统,输送系统,拣选系统和包装系…

wordpress创建网站赚钱

1. 引言上两节我们通过简单的demo学习了docker的基本操作。这一节我们来一个进阶学习,完成ASP.NET Core MySql Nginx的容器化部署。本文是基于CentOS 7.4环境进行演示,示例项目可以访问Docker.NetCore.MySql进行下载。2. Hello MySQL同样我们还是以循序…

局域网建设网站如何访问北京知名网站推广

快照器管理容器文件系统的快照。 可通过运行 ctr plugins ls 或 nerdctl info 查看可用的快照器。 核心快照器插件 通用: overlayfs(默认): OverlayFS. 该驱动程序类似于 Docker/Moby 的 "overlay2 "存储驱动程序&a…

枣庄住房和城乡建设厅网站网站文件下载系统

跨域 什么是跨域?非同源限制跨域解决方案CORSJSONP服务器进行第三方代理webscoketwindow.postMessage 什么是跨域? 同源策略:协议相同、域名相同、端口号相同 的两个页面被认为是同源。 由一个页面的 js 访问不同源的页面内容,被…

网站建设公司 壹宇网络定制网站制作

概述 在工作中,软件、代码、程序这三个词经常被换用,大部分情况下,这种混用都不会出问题,实际上,它们是不同的概念,有相交的部分,也有不同的地方。本文就简单阐述一下他们的区别。 在计算机领…

ps做的网站首页vps 网站权限

ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力。在查询 Action 中,我们可以将 Expression Trees 用作参数,通过自定义的…

网站知识架构腾讯云做wordpress太卡

视频链接: 视频 代码链接: 源码 在C#中,静态类(Static Class)和静态方法(Static Method)是面向对象编程中的重要概念。它们允许你创建不依赖于对象实例的方法和属性,而是直接通过类名来访问。 静态类 静…

营销网站制作企业虚拟主机网站建设步骤?

原文作者:心莱科技肖鑫简单来说机器学习的核心步骤在于“获取学习数据;选择机器算法;定型模型;评估模型,预测模型结果”,下面本人就以判断日报内容是否合格为例为大家简单的阐述一下C#的机器学习。第一步&a…

企业网站如何设计网页网站建设报价表模板

Python遥感开发之批量拼接 1 遥感图像无交错的批量拼接2 遥感图像有交错的批量拼接 前言:主要借助python实现遥感影像的批量拼接,遥感影像的批量拼接主要分为两种情况,一种是遥感图像无交错,另一种情况是遥感图像相互有交错。具体…

电子商务网站建设和运营1688阿里巴巴官网

全世界只有3.14 % 的人关注了爆炸吧知识首先来看你绝对干过的15件傻事儿,别不承认!把树叶弄成这样喝酸奶舔盖子吃完棒冰继续含着棍子咬拉链尝试用笔写一首歌比如《生日快乐》对着电风扇说话或喊叫刮墙壁上的油漆过斑马线只踩白色部分猫打哈欠时伸手指进去…

网页内容沧州网站优化

数据类型之Integer与int Java入门 基本数据类型 众所周知,Java是面向对象的语言,一切皆对象。但是为了兼容人类根深蒂固的数据处理习惯,加快常规数据的处理速度,提供了9种基本数据类型,他们都不具备对象的特性&#xf…

国内网站设计公司做网站是58好还是百度好

在HTML中&#xff0c;如果你想动态设置下拉选项&#xff08;<select>元素中的<option>&#xff09;&#xff0c;你可以使用JavaScript。以下是一个示例&#xff0c;展示了如何使用JavaScript来动态添加下拉选项&#xff1a; <!DOCTYPE html> <…

企业门户网站建设管理制度网站如何设置域名

目录 基本介绍 安装添加模块 模块配置指令 基本介绍 nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出&#xff0c;后续的请求不再经过应用程序处理&#xff0c;如php-fpm、django&#xff0c;大大的提升动态页面的速度。nginx只负责从memcach…

wordpress关闭多站点网站的站点的管理系统

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…