培训班报名seo教程优化

张小明 2026/3/2 19:57:41
培训班报名,seo教程优化,关键词优化排名软件流量词,建设者网站目录 1 委托构造函数 2 继承构造函数 1 委托构造函数 委托构造函数允许使用同一个类中的一个构造函数调用其他的构造函数#xff0c;从而简化相关变量的初始化。下面通过一个例子说明#xff1a; class Test { public:Test() {};Test(int max) {this-m_max max …目录1 委托构造函数2 继承构造函数1 委托构造函数委托构造函数允许使用同一个类中的一个构造函数调用其他的构造函数从而简化相关变量的初始化。下面通过一个例子说明class Test { public: Test() {}; Test(int max) { this-m_max max 0 ? max : 100; } Test(int max, int min) { this-m_max max 0 ? max : 100; // 冗余代码 this-m_min min 0 min max ? min : 1; } Test(int max, int min, int mid) { this-m_max max 0 ? max : 100; // 冗余代码 this-m_min min 0 min max ? min : 1; // 冗余代码 this-m_mid mid max mid min ? mid : 50; } public: int m_max; int m_min; int m_mid; }; int main() { Test t(90, 30, 60); cout min: t.m_min , middle: t.m_mid , max: t.m_max endl; return 0; }在上面三个重载的构造函数中都出现重复的代码在 C11 以前我们会把重复的代码放到一个函数里然后调用在 C11 以后加入了委托构造我们就可以轻松地完成代码的优化了class Test { public: Test() {}; Test(int max) { this-m_max max 0 ? max : 100; } Test(int max, int min) : Test(max) { this-m_min min 0 min max ? min : 1; } Test(int max, int min, int mid) : Test(max,min) { this-m_mid mid max mid min ? mid : 50; } public: int m_max; int m_min; int m_mid; }; int main() { Test t(90, 30, 60); cout min: t.m_min , middle: t.m_mid , max: t.m_max endl; return 0; }修改完代码之后冗余的代码全部都没有了并且在一个构造函数中调用了其他的构造函数用于相关数据的初始化相当于是一个链式调用。在使用委托构造函数的时候还需要注意一些几个问题这种链式的构造函数调用不能形成一个闭环否则会在运行期间抛出异常如果要进行多层构造函数的链式调用建议将构造函数的调用的写在初始列表中而不是函数体内部否则编译器会提示形参的重复定义。Test() {}; Test(int max) { this-m_max max 0 ? max : 100; } Test(int max, int min) { Test(max); //报错 this-m_min min 0 min max ? min : 1; } Test(int max, int min, int mid) { Test(max, min); //报错 this-m_mid mid max mid min ? mid : 50; }在初始化列表中调用了代理构造函数初始化某个类成员变量之后就不能在初始化列表中再次初始化这个变量了// 错误, 使用了委托构造函数就不能再次m_max初始化了 Test(int max, int min) : Test(max), m_max(max) { this-m_min min 0 min max ? min : 1; }2 继承构造函数C11 中提供的继承构造函数可以让派生类直接使用基类的构造函数而无需自己再写构造函数尤其是在基类有很多构造函数的情况下可以极大地简化派生类构造函数的编写。先来看没有继承构造函数之前的处理方式class Base { public: Base(int i) :m_i(i) {} Base(int i, double j) :m_i(i), m_j(j) {} Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {} int m_i; double m_j; string m_k; }; class Child : public Base { public: Child(int i) :Base(i) {} Child(int i, double j) :Base(i, j) {} Child(int i, double j, string k) :Base(i, j, k) {} }; int main() { Child c(520, 13.14, i love you); cout int: c.m_i , double: c.m_j , string: c.m_k endl; return 0; }我们通过继承构造函数在子类中重新定义和基类一样的构造函数通过使用using 基类名::基类的构造函数名来使用基类的构造函数这样子类中就可以不定义相同的构造函数了直接使用基类的构造函数来构造派生类对象。class Base { public: Base(int i) :m_i(i) {} Base(int i, double j) :m_i(i), m_j(j) {} Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {} int m_i; double m_j; string m_k; }; class Child : public Base { public: using Base::Base; // 引入父类Base的构造函数及其重载 }; int main() { Child c(520, 13.14, i love you); cout int: c.m_i , double: c.m_j , string: c.m_k endl; return 0; }在修改后的子类中没有添加任何构造函数而是添加了using Base::Base这样就可以在子类中直接继承父类的所有的构造函数通过他们去构造子类对象了。此外如果在子类中隐藏了父类中的同名函数也可以通过 using 的方式在子类中使用基类中的这些父类函数class Base { public: Base(int i) :m_i(i) {} Base(int i, double j) :m_i(i), m_j(j) {} Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {} void func(int i) { cout base class: i i endl; } void func(int i, string str) { cout base class: i i , str str endl; } int m_i; double m_j; string m_k; }; class Child : public Base { public: using Base::Base; // 引入父类Base的构造函数及其重载 using Base::func; // 引入父类Base的func函数及其重载 void func() { cout child class: iam huang endl; } }; int main() { Child c(250); c.func(); c.func(18); c.func(18, huang); return 0; }输出结果child class: iam huang base class: i 18 base class: i 18, str huang子类中的func()函数隐藏了基类中的两个func()默认情况下通过子类对象只能调用无参的func()在上面的子类代码中添加了using Base::func之后就可以通过子类对象直接调用父类中被隐藏的带参 func() 函数了。这里插入一个注意事项在 C 中当我们在派生类中没有重写基类的重载函数之一的时候在派生类中调用重载函数时是可以在其基类中查到的。然而当我们想在子类中重写基类中某一个重载函数时基类所有同名的重载函数会被隐藏需通过using 基类名::函数名引入才能让子类对象正常调用基类的重载函数。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做电脑网站与手机上的一样吗seo技术团队

Langchain-Chatchat 与 Telegraf 集成:构建安全可控的智能问答可观测体系 在企业知识管理日益复杂的今天,一个常见的困境是:公司内部积累了大量 PDF、Word 和 PPT 形式的制度文档、产品手册和技术规范,但员工却常常“知道有资料&a…

张小明 2026/1/12 16:13:02 网站建设

权威的徐州网站建设北京 高端网站设计

各位,当你使用Mac电脑时,是否曾感叹它那流畅的界面、强大的交互生态及那些令人惊叹的生产力工具?然而,你可能还没意识到,你的Mac桌面其实还隐藏着一个超乎想象的能力,在很多需要Windows、HarmonyOS&#xf…

张小明 2026/1/12 16:11:01 网站建设

甘肃建网站个人站长还有什么类型的网站可以做

抖音视频下载终极实战指南:5步搞定无水印高清视频 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音视频下载烦恼吗?这款抖音视频下载工具让你轻松获取无水印高清视频&#x…

张小明 2026/1/12 16:08:56 网站建设

网站开发 精品课程浙江公司响应式网站建设推荐

QQ空间历史说说一键导出终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾为无法完整备份QQ空间的珍贵回忆而烦恼?那些年少的青涩文字、难忘的旅行照片、重要…

张小明 2026/1/12 16:06:55 网站建设

网站空间需要备案吗编程网站网址

Linux操作系统概述一、什么是Linux? 知识点说明: Linux 是一个开源、免费、多用户、多任务、支持多线程和多CPU的操作系统内核。它最初由 Linus Torvalds 于1991年开发,基于 UNIX 的设计理念,但不包含任何 UNIX 源代码。注意&…

张小明 2026/1/12 16:04:45 网站建设

网站网上商城建设店面设计软件

GP2040-CE是一款专为游戏控制器打造的开源固件项目,基于Raspberry Pi Pico开发板构建。这款固件让玩家能够完全自定义按键功能,打造真正属于自己的游戏体验。 【免费下载链接】GP2040-CE 项目地址: https://gitcode.com/gh_mirrors/gp/GP2040-CE …

张小明 2026/1/12 16:02:35 网站建设