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

做一网站要什么软件有哪些logo网站免费

做一网站要什么软件有哪些,logo网站免费,十大装修公司,手机视频制作软件委托构造函数是什么? 传统C中,一个类如果有多个构造函数(重载),它们往往会有很多重复的初始化代码。比如: class Foo { public:Foo() {// 初始化成员A、B、C}Foo(int x) {// 初始化成员A、B、C// 额外处理…

委托构造函数是什么?

传统C++中,一个类如果有多个构造函数(重载),它们往往会有很多重复的初始化代码。比如:

    class Foo {
public:Foo() {// 初始化成员A、B、C}Foo(int x) {// 初始化成员A、B、C// 额外处理x}Foo(int x, int y) {// 初始化成员A、B、C// 额外处理x和y}
};

你会发现,初始化成员A、B、C的代码在每个构造函数里都写了一遍,代码冗余,维护起来麻烦。

委托构造函数就是让一个构造函数“委托”调用同类中另一个构造函数,复用它的初始化逻辑。换句话说,就是“我不自己写初始化了,交给你那个构造函数去做”,这样只写一份初始化代码,其他构造函数都调用它。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
个人教程网站内容更丰富:(https://www.1217zy.vip/)
(加入我的知识星球,免费获取账号,解锁所有文章。https://t.zsxq.com/VZxX7)

传统写法 vs 委托构造函数写法对比

传统写法(代码冗余)

    #include <iostream>
using namespace std;class Person {string name;int age;
public:Person() {name = "Unknown";age = 0;cout << "Default constructor\n";}Person(string n) {name = n;age = 0;cout << "One-arg constructor\n";}Person(string n, int a) {name = n;age = a;cout << "Two-arg constructor\n";}void print() {cout << name << ", " << age << endl;}
};int main() {Person p1;Person p2("Alice");Person p3("Bob", 30);p1.print();p2.print();p3.print();return 0;
}

这里每个构造函数都重复写了name和age的初始化,代码臃肿。

委托构造函数写法(代码简洁)

    #include <iostream>
using namespace std;class Person {string name;int age;
public:Person() : Person("Unknown", 0) {cout << "Default constructor delegates\n";}Person(string n) : Person(n, 0) {cout << "One-arg constructor delegates\n";}Person(string n, int a) : name(n), age(a) {cout << "Two-arg constructor\n";}void print() {cout << name << ", " << age << endl;}
};int main() {Person p1;Person p2("Alice");Person p3("Bob", 30);p1.print();p2.print();p3.print();return 0;
}

这里,默认构造函数委托给了带两个参数的构造函数,带一个参数的构造函数也委托给了带两个参数的构造函数,初始化逻辑只写了一遍,代码清爽且易维护。

委托构造函数的设计哲学

  • 减少代码重复:初始化代码只写一遍,避免多个构造函数重复书写相同代码。
  • 提高代码可维护性:修改初始化逻辑只需改一个构造函数,降低错误风险。
  • 逻辑清晰:构造函数之间职责分明,层层委托,符合“先通用后特殊”的设计原则。
  • 避免初始化冲突:委托构造函数只能调用一个其他构造函数,且不能同时初始化成员变量,避免初始化顺序混乱。

最佳使用场景

  • • 类中有多个构造函数,且它们之间有大量重复初始化代码。
  • • 需要统一初始化逻辑,减少维护成本。
  • • 构造函数参数较多,部分构造函数参数是另一些构造函数参数的子集。
  • • 需要构造函数之间分层调用,逐步完善对象状态。

优缺点分析

优点缺点
减少构造函数间代码重复,提升维护性委托构造函数只能调用一个其他构造函数,限制灵活性
逻辑清晰,构造职责分明不能和成员初始化列表同时使用,限制了初始化方式
避免初始化代码不一致导致的bug多层委托可能导致“委托环”错误,编译器会报错
支持异常传播,委托构造函数中可捕获目标构造函数异常委托构造函数中不能再初始化成员变量,只能在函数体内赋值

常见误用及后果

形成委托环(Delegation Cycle)

比如构造函数A委托构造函数B,构造函数B又委托构造函数A,会导致编译错误。

委托构造函数中同时初始化成员变量

委托构造函数初始化列表只能包含一个其他构造函数调用,不能再初始化成员变量,否则编译错误。

忽视异常传播

如果目标构造函数抛出异常,委托构造函数可以捕获,但目标构造函数体内代码不会执行,委托函数中对成员赋值也可能无效。

滥用委托导致代码复杂

多层委托链条过长,反而降低代码可读性和调试难度。

进阶示例:异常处理中的委托构造函数

    #include <iostream>
using namespace std;class Foo {int type;char name;
public:Foo(int i) try : Foo(i, 'c') {cout << "Start assignment\n";type = i;} catch (...) {cout << "Caught exception\n";}
private:Foo(int i, char c) {cout << "Throw exception\n";throw 0;}
};int main() {try {Foo f(1);} catch (...) {cout << "Exception propagated to main\n";}return 0;
}

输出:

    Throw exception
Caught exception
Exception propagated to main

说明委托构造函数可以捕获目标构造函数抛出的异常,且目标构造函数体内代码未执行,符合初始化语义。

委托构造函数的价值

委托构造函数是C++11对构造函数设计的精细打磨,它让构造函数之间的关系更清晰,代码更简洁,维护更轻松。它体现了现代C++追求**“代码复用与简洁表达”**的设计哲学,避免了传统构造函数中反复初始化的冗余和潜在错误。

我认为,委托构造函数的真正价值不仅是减少代码量,更是推动程序员以更结构化和模块化的思维来设计类的初始化流程。合理使用委托构造函数,配合现代C++的其他特性,能让你的代码既优雅又健壮。


文章转载自:

http://GiQui674.qfkdt.cn
http://RKjbIzjJ.qfkdt.cn
http://qTLaSGmA.qfkdt.cn
http://BpMC91GQ.qfkdt.cn
http://NH5FjzNL.qfkdt.cn
http://ulyaSREy.qfkdt.cn
http://4R9zstoM.qfkdt.cn
http://3oPgSZO6.qfkdt.cn
http://qAesXXBB.qfkdt.cn
http://nzSEXW1f.qfkdt.cn
http://ijtrNiOg.qfkdt.cn
http://9VBitYhU.qfkdt.cn
http://yjsN4ZTE.qfkdt.cn
http://4Ymg7OpK.qfkdt.cn
http://Dl10O5ej.qfkdt.cn
http://3jaMxn9j.qfkdt.cn
http://yOFLTO18.qfkdt.cn
http://1kUTduZa.qfkdt.cn
http://uRJtSWpo.qfkdt.cn
http://VjmRu2ME.qfkdt.cn
http://UgQ8hdVf.qfkdt.cn
http://9uUJXaM2.qfkdt.cn
http://LZamrUp2.qfkdt.cn
http://Y5Bh1Gg3.qfkdt.cn
http://SE0COo5o.qfkdt.cn
http://duN1mypF.qfkdt.cn
http://YFwNTk5u.qfkdt.cn
http://y88xf1od.qfkdt.cn
http://Ia19VWk3.qfkdt.cn
http://rGfbPf9h.qfkdt.cn
http://www.dtcms.com/wzjs/722780.html

相关文章:

  • 网站开发后端需要哪些技术网站生成移动版
  • 不备案网站怎么做淘宝客资源网站自己建设还是发软文
  • 游戏网站开发过程wordpress免费教育模板下载地址
  • 东明县网站建设网站设置支付宝在线支付
  • 毕业设计网站开发任务安排3d建模基础入门教程
  • e4a做网站app自己动手做衣服网站
  • 江苏住房和城乡建设局网站呼伦贝尔网站设计
  • 全新正版营销网站虚拟主机建设网站两个
  • 网站制作的电话可以做ppt的网站有哪些
  • 便宜旅游机票网站建设wordpress首页模板编辑
  • 服务器主机 网站吗市场调研分析报告模板
  • 大连网站设计策划wordpress 菜单图标
  • 网站建设+用ftp上传文件深圳市招投标交易中心
  • 电影下载网站如何做投百度做广告效果怎么样
  • 学校网站建设介绍范文临沂做网站找哪家好
  • wordpress建站注册新用户湖北省住房部城乡建设厅网站
  • 苏州网站建设多少钱外贸营销网站建设
  • 泰安企业网站建设免费咨询话术
  • 建设行业个人云网站有哪些可以在网上做兼职的网站
  • 山西建设集团网站建行个人网上银行
  • 一个网站多台服务器企业网站建设需要注意什么
  • 网站开发前端工程师沈阳制作网站的公司
  • 阿里巴巴做网站删除wordpress媒体库多余
  • 如何建立网站服务器商城购物网站定制
  • 佛山网站建设开发可以做拟合的在线网站
  • 深圳罗湖网站建设公司哪家好做流量网站挂广告还能挣钱吗
  • 如何建立公司网站建议和规则花都营销型网站建设
  • 电子商务网站建设阶段网页设计font代码
  • 网站显示乱码怎么办东营建设局官网
  • 做视频网站 服务器图书馆馆建设网站