网站营销最大的特点wordpress 内容页摘要

张小明 2025/12/27 6:09:01
网站营销最大的特点,wordpress 内容页摘要,长沙关键词快速排名,100个免费设计网站hello#xff0c;这里是AuroraWanderll。 兴趣方向#xff1a;C#xff0c;算法#xff0c;Linux系统#xff0c;游戏客户端开发 欢迎关注#xff0c;我将更新更多相关内容#xff01;我的个人主页 这是类和对象系列的第三篇文章#xff0c;上篇指引#xff1a; 类和对…hello这里是AuroraWanderll。 兴趣方向C算法Linux系统游戏客户端开发 欢迎关注我将更新更多相关内容我的个人主页这是类和对象系列的第三篇文章上篇指引类和对象二访问限定符-类的实例化与this指针类和对象三-默认成员函数详解与运算符重载简易目录类的6个默认成员函数概述构造函数详解析构函数详解1. 类的6个默认成员函数概述核心概念当一个类中什么成员都没有时称为空类即用户没有显式实现时编译器会自动生成6个默认成员函数。class Date {}; // 看似空的类实际上编译器会生成6个默认成员函数序号默认成员函数基本作用1构造函数对象创建时自动调用用于初始化对象2析构函数对象销毁时自动调用用于清理资源3拷贝构造函数用同类型的已有对象初始化新对象,如v1(v2)4拷贝赋值运算符将一个对象的值赋给另一个同类型对象如v1v25移动构造函数(C11)通过移动资源来初始化新对象避免不必要的拷贝6移动赋值运算符(C11)通过移动资源来赋值避免不必要的拷贝7取地址重载运算符其中5,6相对比较进阶本篇不会提及.2. 构造函数2.1 构造函数的概念背景为什么我们要有构造函数答C语言传统初始化方式繁琐class Date { public: void Init(int year, int month, int day) { _year year; _month month; _day day; } // ... 其他成员 }; int main() { Date d1; d1.Init(2022, 7, 5); // 每次创建对象后都要手动调用初始化函数Init,未免太过麻烦 return 0; }构造函数定义特殊的成员函数在创建对象时自动调用用于初始化对象数据成员整个生命周期只调用一次。2.2 构造函数的特性基本特征函数名与类名相同无返回值对象实例化时自动调用重载一个对象可以有多个不同的构造函数需要注意的是虽然叫构造函数但是它并不负责开空间创建对象它的主要工作是初始化对象class Date { public: // 1. 无参构造函数 Date() {} // 2. 带参构造函数重载 Date(int year, int month, int day) { _year year; _month month; _day day; } private: int _year; int _month; int _day; }; void TestDate() { Date d1; // 调用无参构造函数 Date d2(2015, 1, 1); // 调用带参构造函数 // 注意无参构造不能加括号否则变成函数声明 Date d3(); // 错误声明了d3函数而非创建对象 }编译器自动生成规则如果类中没有显式定义构造函数编译器自动生成无参默认构造函数一旦用户显式定义任何构造函数编译器不再生成默认构造函数class Date { // 如果用户显式定义构造函数编译器不再生成默认构造函数 // Date(int year, int month, int day) { ... } private: int _year; int _month; int _day; }; int main() { Date d1; // 如果屏蔽自定义构造函数编译通过如果放开编译失败 return 0; }默认构造函数的作用看起来编译器自动生成的默认构造函数没有作用例如int类型的参数默认构造之后依旧是随机值。实际上默认构造函数是会根据类型来进行不同的初始化的对内置类型int、char等不处理C11前或使用默认值C11后对自定义类型调用其默认构造函数class Time { public: Time() // Time类的构造函数 { cout Time() endl; _hour 0; _minute 0; _second 0; } private: int _hour; int _minute; int _second; }; class Date { private: // 内置类型成员C11之前不处理 int _year; int _month; int _day; // 自定义类型成员 Time _t; // 编译器生成的默认构造函数会调用Time的构造函数 }; int main() { Date d; // 调用Date的默认构造函数同时会调用Time的构造函数 return 0; }C11改进内置类型成员可以在声明时给默认值class Date { private: // 内置类型成员给默认值C11之后直接初始化成我们给的默认值 int _year 1970; int _month 1; int _day 1; Time _t; // 自定义类型 };默认构造函数规则无参构造函数、全缺省构造函数、编译器生成的构造函数都算默认构造函数默认构造函数只能有一个class Date { public: // 无参构造函数默认构造函数 Date() { _year 1900; _month 1; _day 1; } // 全缺省构造函数也是默认构造函数 Date(int year 1900, int month 1, int day 1) { _year year; _month month; _day day; } };如果我们在类的对象中同时写了超过一个的默认构造那么它就会报错编译错误原因当执行Date d1;时编译器面临选择困难可以调用无参构造函数Date()也可以调用全缺省构造函数Date(1900, 1, 1)使用默认参数两个函数都匹配编译器无法确定该调用哪一个因此报编译错误。正确写法方案1只保留一个默认构造函数class Date { public: // 只保留全缺省构造函数推荐 Date(int year 1900, int month 1, int day 1) { _year year; _month month; _day day; } };方案2使用不同的参数列表class Date { public: // 无参构造函数 Date() : _year(1900), _month(1), _day(1) {} // 带参构造函数不是全缺省 Date(int year, int month, int day) { _year year; _month month; _day day; } };可以简单理解默认构造函数是调用时不需要传递参数的构造函数总结要点空类会自动获得6个默认成员函数构造函数在对象创建时自动调用用于初始化构造函数可以重载名称与类名相同且无返回值编译器在特定条件下自动生成默认构造函数默认构造函数对内置类型和自定义类型的处理方式不同C11允许内置类型成员在声明时给默认值3. 析构函数详解3.1 析构函数的概念核心问题对象是如何被销毁的析构函数定义与构造函数功能相反但不是完成对象本身的销毁局部对象的销毁由编译器完成而是在对象销毁时自动调用完成对象中资源的清理工作。3.2 析构函数的特性基本特征函数名类名前加上~参数和返回值无参数、无返回值类型唯一性一个类只能有一个析构函数不能重载调用时机对象生命周期结束时自动调用class Stack { public: // 构造函数申请资源 Stack(size_t capacity 3) { _array (int*)malloc(sizeof(int) * capacity); if (NULL _array) { perror(malloc申请空间失败!!!); return; } _capacity capacity; _size 0; } // 析构函数释放资源 ~Stack() { if (_array) { free(_array); // 释放动态内存 _array NULL; // 防止野指针 _capacity 0; // 重置容量 _size 0; // 重置大小 } } void Push(int data) { _array[_size] data; _size; } private: int* _array; int _capacity; int _size; }; void TestStack() { Stack s; // 构造函数自动调用 s.Push(1); s.Push(2); // 函数结束时s的析构函数自动调用释放内存 }编译器生成的析构函数重要特性编译器生成的默认析构函数会对自定义类型成员调用其析构函数。class Time { public: ~Time() { cout ~Time() endl; // 析构时输出信息 } private: int _hour; int _minute; int _second; }; class Date { private: // 内置类型成员 int _year 1970; int _month 1; int _day 1; // 自定义类型成员 Time _t; // 包含Time类对象 }; int main() { Date d; // 创建Date对象 return 0; } // d销毁时输出~Time()运行结果解释虽然main函数中没有直接创建Time对象但Date对象d包含Time成员_t当d销毁时编译器为Date生成的默认析构函数会自动调用Time类的析构函数析构函数的调用规则关键原则创建哪个类的对象就调用该类的构造函数销毁哪个类的对象就调用该类的析构函数编译器生成的析构函数会保证所有成员都能正确销毁3.3 何时需要编写析构函数不需要编写的情况class Date { private: int _year 1970; int _month 1; int _day 1; // 只有内置类型无动态资源使用编译器生成的析构函数即可 };必须编写的情况class Stack { private: int* _array; // 动态分配的内存 int _capacity; int _size; public: // 必须编写析构函数来释放动态内存 ~Stack() { if (_array) { free(_array); _array NULL; } } };也就是说不是说自定义类型就一定需要写析构函数关键在于你的类型之中是否动态申请资源。资源泄漏风险如果类中申请了资源动态内存、文件句柄、网络连接等但没有编写析构函数会导致资源泄漏。3.4 实际应用场景场景1动态数组管理class DynamicArray { private: int* _data; size_t _size; public: DynamicArray(size_t size) : _size(size) { _data new int[size]; // 动态分配 } ~DynamicArray() { delete[] _data; // 必须释放 _data nullptr; } };场景2文件资源管理class FileHandler { private: FILE* _file; public: FileHandler(const char* filename) { _file fopen(filename, r); } ~FileHandler() { if (_file) { fclose(_file); // 必须关闭文件 _file nullptr; } } };总结析构函数作用对象销毁时自动调用用于资源清理语法特征~类名()无参无返回值不能重载调用时机对象生命周期结束时自动调用编译器行为默认生成的析构函数会调用自定义类型成员的析构函数编写原则有资源申请时必须编写无资源时可依赖编译器生成资源管理防止内存泄漏、文件未关闭等资源管理问题核心思想谁申请谁释放构造函数申请资源析构函数释放资源形成完整的资源管理生命周期。感谢你能够阅读到这里如果本篇文章对你有帮助欢迎点赞收藏支持关注我 我将更新更多有关CLinux系统·网络部分的知识。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

流量卡网站电商类网页设计

8个自考任务书写作工具,AI格式优化软件推荐 在论文的海洋中,你是否也曾迷失方向? 对于自考学子而言,完成一篇高质量的任务书、文献综述或毕业论文,往往是一场与时间赛跑的战役。每一份材料都需要反复修改、调整格式、优…

张小明 2025/12/26 5:02:56 网站建设

惠州市住房和城乡规划建设局网站抚顺优化seo

学之思考试系统:5分钟完成JavaVue在线考试平台部署 【免费下载链接】xzs-mysql 学之思开源考试系统是一款 java vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设…

张小明 2025/12/25 1:18:59 网站建设

申请网站域名多少钱系统首页设计

vant小程序版弹窗穿透滚动的解决方案 禁止滚动穿透 使用组件时,会发现内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。 目前,组件可以通过 lock-scroll 属性处理部分滚动穿透问题。 但由于小程序自身原因&…

张小明 2025/12/26 5:27:43 网站建设

有哪些外国网站国内可以登录的安卓app免费下载

EmotiVoice语音合成自动化标注辅助系统开发 在语音交互日益普及的今天,用户早已不再满足于“能说话”的机器。从智能客服到虚拟主播,从有声读物到游戏对白,人们期待的是带有情绪起伏、具备个性特征的真实声音体验。然而,高质量语音…

张小明 2025/12/26 14:43:04 网站建设

自助建站系统软件vs2010做网站前台

LangFlow中的数据脱敏工具:保护用户隐私信息 在金融、医疗和政务等高敏感领域,AI系统的每一次输入都可能暗藏风险。当开发者将真实客户数据导入大语言模型(LLM)进行调试时,一个疏忽就可能导致姓名、身份证号甚至银行卡…

张小明 2025/12/26 23:47:41 网站建设

桂林网站建设动服卖照明电源设职业培训机构排名前十

Android开发期末大作业:新手的终极通关手册 【免费下载链接】Android开发期末大作业资源文件 本仓库提供了一个Android开发期末大作业的资源文件,文件名为android开发期末大作业.zip。该资源文件包含了项目源码、任务书、实验大报告以及apk文件。通过这些…

张小明 2025/12/26 20:47:46 网站建设