[{"data":1,"prerenderedAt":2685},["ShallowReactive",2],{"navigation":3,"\u002Fch05\u002Foverload":909,"\u002Fch05\u002Foverload-surround":2680},[4,36,56,96,230,270,414,457,508,583,649,685,767,864,900,904],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"附录","i-lucide-bookmark","\u002Fappendix","appendix",[10,12,16,20,24,28,32],{"title":5,"path":7,"stem":11,"icon":6},"appendix\u002Findex",{"title":13,"path":14,"stem":15,"icon":6},"命令行界面","\u002Fappendix\u002Fcli","appendix\u002Fcli",{"title":17,"path":18,"stem":19,"icon":6},"代码风格","\u002Fappendix\u002Fcoding_style","appendix\u002Fcoding_style",{"title":21,"path":22,"stem":23,"icon":6},"关键字列表","\u002Fappendix\u002Fkeyword","appendix\u002Fkeyword",{"title":25,"path":26,"stem":27,"icon":6},"运算符优先级和结合方向","\u002Fappendix\u002Foperator","appendix\u002Foperator",{"title":29,"path":30,"stem":31,"icon":6},"预处理指令","\u002Fappendix\u002Fpreprocessor","appendix\u002Fpreprocessor",{"title":33,"path":34,"stem":35,"icon":6},"值类别","\u002Fappendix\u002Fvalue_category","appendix\u002Fvalue_category",{"title":37,"icon":38,"path":39,"stem":40,"children":41},"第〇章 基本概念","i-lucide-monitor","\u002Fch00","ch00",[42,44,48,52],{"title":37,"path":39,"stem":43,"icon":38},"ch00\u002Findex",{"title":45,"path":46,"stem":47,"icon":38},"计算机","\u002Fch00\u002Fcomputer","ch00\u002Fcomputer",{"title":49,"path":50,"stem":51,"icon":38},"编程","\u002Fch00\u002Fprogramming","ch00\u002Fprogramming",{"title":53,"path":54,"stem":55,"icon":38},"编程语言","\u002Fch00\u002Fprogramming_language","ch00\u002Fprogramming_language",{"title":57,"icon":58,"path":59,"stem":60,"children":61},"第一章 感性认识 C++ 程序","i-lucide-book-open","\u002Fch01","ch01",[62,64,68,72,76,80,84,88,92],{"title":57,"path":59,"stem":63,"icon":58},"ch01\u002Findex",{"title":65,"path":66,"stem":67,"icon":58},"赋值和分支","\u002Fch01\u002Fassignment_and_if","ch01\u002Fassignment_and_if",{"title":69,"path":70,"stem":71,"icon":58},"最麻烦的门槛","\u002Fch01\u002Fenvironment","ch01\u002Fenvironment",{"title":73,"path":74,"stem":75,"icon":58},"第一个 C++ 程序","\u002Fch01\u002Ffirst_program","ch01\u002Ffirst_program",{"title":77,"path":78,"stem":79,"icon":58},"输入","\u002Fch01\u002Finput","ch01\u002Finput",{"title":81,"path":82,"stem":83,"icon":58},"综合运用","\u002Fch01\u002Fintegrated_use","ch01\u002Fintegrated_use",{"title":85,"path":86,"stem":87,"icon":58},"循环","\u002Fch01\u002Floop","ch01\u002Floop",{"title":89,"path":90,"stem":91,"icon":58},"更多的输出","\u002Fch01\u002Fmore_output","ch01\u002Fmore_output",{"title":93,"path":94,"stem":95,"icon":58},"总结","\u002Fch01\u002Fsummary","ch01\u002Fsummary",{"title":97,"path":98,"stem":99,"children":100,"icon":102},"第二章 理性认识 C++ 程序","\u002Fch02","ch02\u002Findex",[101,103,149,188,227],{"title":97,"path":98,"stem":99,"icon":102},"i-lucide-code",{"title":104,"icon":105,"path":106,"stem":107,"children":108},"第 1 部分 数据成分","i-lucide-database","\u002Fch02\u002Fpart1","ch02\u002Fpart1\u002Findex",[109,110,114,118,122,126],{"title":104,"path":106,"stem":107,"icon":105},{"title":111,"path":112,"stem":113,"icon":105},"初识数组","\u002Fch02\u002Fpart1\u002Farray_glance","ch02\u002Fpart1\u002Farray_glance",{"title":115,"path":116,"stem":117,"icon":105},"常量","\u002Fch02\u002Fpart1\u002Fconstant","ch02\u002Fpart1\u002Fconstant",{"title":119,"path":120,"stem":121,"icon":105},"声明语句","\u002Fch02\u002Fpart1\u002Fdeclaration_statement","ch02\u002Fpart1\u002Fdeclaration_statement",{"title":123,"path":124,"stem":125,"icon":105},"只读变量","\u002Fch02\u002Fpart1\u002Freadonly_variable","ch02\u002Fpart1\u002Freadonly_variable",{"title":127,"icon":128,"path":129,"stem":130,"children":131},"类型系统","i-lucide-dna","\u002Fch02\u002Fpart1\u002Ftype_system","ch02\u002Fpart1\u002Ftype_system\u002Findex",[132,133,137,141,145],{"title":127,"path":129,"stem":130,"icon":128},{"title":134,"path":135,"stem":136,"icon":128},"布尔类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Fboolean_type","ch02\u002Fpart1\u002Ftype_system\u002Fboolean_type",{"title":138,"path":139,"stem":140,"icon":128},"字符类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Fcharacter_type","ch02\u002Fpart1\u002Ftype_system\u002Fcharacter_type",{"title":142,"path":143,"stem":144,"icon":128},"浮点类型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Ffloat_type","ch02\u002Fpart1\u002Ftype_system\u002Ffloat_type",{"title":146,"path":147,"stem":148,"icon":128},"整型","\u002Fch02\u002Fpart1\u002Ftype_system\u002Finteger_type","ch02\u002Fpart1\u002Ftype_system\u002Finteger_type",{"title":150,"icon":151,"path":152,"stem":153,"children":154},"第 2 部分 运算成分","i-lucide-calculator","\u002Fch02\u002Fpart2","ch02\u002Fpart2\u002Findex",[155,156,160,164,168,172,176,180,184],{"title":150,"path":152,"stem":153,"icon":151},{"title":157,"path":158,"stem":159,"icon":151},"算术运算符","\u002Fch02\u002Fpart2\u002Farithmetic_operator","ch02\u002Fpart2\u002Farithmetic_operator",{"title":161,"path":162,"stem":163,"icon":151},"赋值运算符","\u002Fch02\u002Fpart2\u002Fassignment_operator","ch02\u002Fpart2\u002Fassignment_operator",{"title":165,"path":166,"stem":167,"icon":151},"位运算符（选读）","\u002Fch02\u002Fpart2\u002Fbit_operator","ch02\u002Fpart2\u002Fbit_operator",{"title":169,"path":170,"stem":171,"icon":151},"关系运算符","\u002Fch02\u002Fpart2\u002Fcomparison_operator","ch02\u002Fpart2\u002Fcomparison_operator",{"title":173,"path":174,"stem":175,"icon":151},"算术类型隐式转换","\u002Fch02\u002Fpart2\u002Fimplicit_conversion","ch02\u002Fpart2\u002Fimplicit_conversion",{"title":177,"path":178,"stem":179,"icon":151},"自增减运算符","\u002Fch02\u002Fpart2\u002Fincdec_operator","ch02\u002Fpart2\u002Fincdec_operator",{"title":181,"path":182,"stem":183,"icon":151},"逻辑运算符","\u002Fch02\u002Fpart2\u002Flogical_operator","ch02\u002Fpart2\u002Flogical_operator",{"title":185,"path":186,"stem":187,"icon":151},"其它常用运算符","\u002Fch02\u002Fpart2\u002Fother_operator","ch02\u002Fpart2\u002Fother_operator",{"title":189,"icon":190,"path":191,"stem":192,"children":193},"第 3 部分 控制成分","i-lucide-git-branch","\u002Fch02\u002Fpart3","ch02\u002Fpart3\u002Findex",[194,195,199,203,207,211,215,219,223],{"title":189,"path":191,"stem":192,"icon":190},{"title":196,"path":197,"stem":198,"icon":190},"复合语句","\u002Fch02\u002Fpart3\u002Fcompound_statement","ch02\u002Fpart3\u002Fcompound_statement",{"title":200,"path":201,"stem":202,"icon":190},"for 语句","\u002Fch02\u002Fpart3\u002Ffor_statement","ch02\u002Fpart3\u002Ffor_statement",{"title":204,"path":205,"stem":206,"icon":190},"if 语句","\u002Fch02\u002Fpart3\u002Fif_statement","ch02\u002Fpart3\u002Fif_statement",{"title":208,"path":209,"stem":210,"icon":190},"跳转语句","\u002Fch02\u002Fpart3\u002Fjump_statement","ch02\u002Fpart3\u002Fjump_statement",{"title":212,"path":213,"stem":214,"icon":190},"空语句","\u002Fch02\u002Fpart3\u002Fnull_statement","ch02\u002Fpart3\u002Fnull_statement",{"title":216,"path":217,"stem":218,"icon":190},"作用域","\u002Fch02\u002Fpart3\u002Fscope","ch02\u002Fpart3\u002Fscope",{"title":220,"path":221,"stem":222,"icon":190},"switch 语句","\u002Fch02\u002Fpart3\u002Fswitch_statement","ch02\u002Fpart3\u002Fswitch_statement",{"title":224,"path":225,"stem":226,"icon":190},"while 语句","\u002Fch02\u002Fpart3\u002Fwhile_statement","ch02\u002Fpart3\u002Fwhile_statement",{"title":93,"path":228,"stem":229,"icon":102},"\u002Fch02\u002Fsummary","ch02\u002Fsummary",{"title":231,"icon":232,"path":233,"stem":234,"children":235},"第三章 过程式编程","i-lucide-function-square","\u002Fch03","ch03",[236,239,243,247,251,255,259,263,267],{"title":231,"path":233,"stem":237,"icon":238},"ch03\u002Findex","i-lucide-square-function",{"title":240,"path":241,"stem":242,"icon":232},"函数","\u002Fch03\u002Ffunction","ch03\u002Ffunction",{"title":244,"path":245,"stem":246,"icon":232},"函数的定义、声明和调用","\u002Fch03\u002Ffunction_definition","ch03\u002Ffunction_definition",{"title":248,"path":249,"stem":250,"icon":232},"函数的执行","\u002Fch03\u002Ffunction_execution","ch03\u002Ffunction_execution",{"title":252,"path":253,"stem":254,"icon":232},"初识函数","\u002Fch03\u002Ffunction_glance","ch03\u002Ffunction_glance",{"title":256,"path":257,"stem":258,"icon":232},"递归","\u002Fch03\u002Frecursion","ch03\u002Frecursion",{"title":260,"path":261,"stem":262,"icon":232},"重新认识 C++ 程序","\u002Fch03\u002Freview_cpp","ch03\u002Freview_cpp",{"title":264,"path":265,"stem":266,"icon":232},"再谈作用域","\u002Fch03\u002Fscope_again","ch03\u002Fscope_again",{"title":93,"path":268,"stem":269,"icon":232},"\u002Fch03\u002Fsummary","ch03\u002Fsummary",{"title":271,"icon":272,"path":273,"stem":274,"children":275},"第四章 POD 类型与结构","i-lucide-layers","\u002Fch04","ch04",[276,278,301,316,320,338,365,392,407,410],{"title":271,"path":273,"stem":277,"icon":272},"ch04\u002Findex",{"title":279,"icon":280,"path":281,"stem":282,"children":283},"数组","i-lucide-grid","\u002Fch04\u002Farray","ch04\u002Farray\u002Findex",[284,285,289,293,297],{"title":279,"path":281,"stem":282,"icon":280},{"title":286,"path":287,"stem":288,"icon":280},"二维数组","\u002Fch04\u002Farray\u002F2d_array","ch04\u002Farray\u002F2d_array",{"title":290,"path":291,"stem":292,"icon":280},"数组的定义和初始化","\u002Fch04\u002Farray\u002Farray_init","ch04\u002Farray\u002Farray_init",{"title":294,"path":295,"stem":296,"icon":280},"数组的用途","\u002Fch04\u002Farray\u002Farray_usage","ch04\u002Farray\u002Farray_usage",{"title":298,"path":299,"stem":300,"icon":280},"C 风格字符串","\u002Fch04\u002Farray\u002Fc_string","ch04\u002Farray\u002Fc_string",{"title":302,"icon":303,"path":304,"stem":305,"children":306},"迁移到 C 语言","i-lucide-arrow-right-left","\u002Fch04\u002Fcompare_with_c","ch04\u002Fcompare_with_c\u002Findex",[307,308,312],{"title":302,"path":304,"stem":305,"icon":303},{"title":309,"path":310,"stem":311,"icon":303},"需要注意的 C 特性","\u002Fch04\u002Fcompare_with_c\u002Fc_feature","ch04\u002Fcompare_with_c\u002Fc_feature",{"title":313,"path":314,"stem":315,"icon":303},"C 输入输出","\u002Fch04\u002Fcompare_with_c\u002Fc_io","ch04\u002Fcompare_with_c\u002Fc_io",{"title":317,"path":318,"stem":319,"icon":272},"枚举","\u002Fch04\u002Fenum","ch04\u002Fenum",{"title":321,"path":322,"stem":323,"children":324,"icon":326},"输入输出成分","\u002Fch04\u002Fio","ch04\u002Fio\u002Findex",[325,327,330,334],{"title":321,"path":322,"stem":323,"icon":326},"i-lucide-terminal",{"title":77,"path":328,"stem":329,"icon":326},"\u002Fch04\u002Fio\u002Finput","ch04\u002Fio\u002Finput",{"title":331,"path":332,"stem":333,"icon":326},"输入失败状态","\u002Fch04\u002Fio\u002Finput_fail","ch04\u002Fio\u002Finput_fail",{"title":335,"path":336,"stem":337,"icon":326},"输出","\u002Fch04\u002Fio\u002Foutput","ch04\u002Fio\u002Foutput",{"title":339,"icon":340,"path":341,"stem":342,"children":343},"链表","i-lucide-list","\u002Fch04\u002Flist","ch04\u002Flist\u002Findex",[344,345,349,353,357,361],{"title":339,"path":341,"stem":342,"icon":340},{"title":346,"path":347,"stem":348,"icon":340},"new[] 和 delete[]","\u002Fch04\u002Flist\u002Farr_new_del","ch04\u002Flist\u002Farr_new_del",{"title":350,"path":351,"stem":352,"icon":340},"链表的增删","\u002Fch04\u002Flist\u002Flist_add_del","ch04\u002Flist\u002Flist_add_del",{"title":354,"path":355,"stem":356,"icon":340},"链表的构建","\u002Fch04\u002Flist\u002Flist_construct","ch04\u002Flist\u002Flist_construct",{"title":358,"path":359,"stem":360,"icon":340},"安全性","\u002Fch04\u002Flist\u002Fsafety","ch04\u002Flist\u002Fsafety",{"title":362,"path":363,"stem":364,"icon":340},"存储期","\u002Fch04\u002Flist\u002Fstorage_duration","ch04\u002Flist\u002Fstorage_duration",{"title":366,"path":367,"stem":368,"children":369,"icon":371},"指针","\u002Fch04\u002Fpointer","ch04\u002Fpointer\u002Findex",[370,372,376,380,384,388],{"title":366,"path":367,"stem":368,"icon":371},"i-lucide-dot",{"title":373,"path":374,"stem":375,"icon":371},"何为指针","\u002Fch04\u002Fpointer\u002Fpointer","ch04\u002Fpointer\u002Fpointer",{"title":377,"path":378,"stem":379,"icon":371},"指针和数组","\u002Fch04\u002Fpointer\u002Fpointer_and_array","ch04\u002Fpointer\u002Fpointer_and_array",{"title":381,"path":382,"stem":383,"icon":371},"指针的定义 Ⅰ","\u002Fch04\u002Fpointer\u002Fpointer_def","ch04\u002Fpointer\u002Fpointer_def",{"title":385,"path":386,"stem":387,"icon":371},"指针的定义 Ⅱ","\u002Fch04\u002Fpointer\u002Fpointer_def_2","ch04\u002Fpointer\u002Fpointer_def_2",{"title":389,"path":390,"stem":391,"icon":371},"指针的简单使用","\u002Fch04\u002Fpointer\u002Fpointer_usage","ch04\u002Fpointer\u002Fpointer_usage",{"title":393,"path":394,"stem":395,"children":396,"icon":398},"结构体","\u002Fch04\u002Fstruct","ch04\u002Fstruct\u002Findex",[397,399,403],{"title":393,"path":394,"stem":395,"icon":398},"i-lucide-box",{"title":400,"path":401,"stem":402,"icon":398},"结构体的定义","\u002Fch04\u002Fstruct\u002Fstruct_def","ch04\u002Fstruct\u002Fstruct_def",{"title":404,"path":405,"stem":406,"icon":398},"结构体的使用","\u002Fch04\u002Fstruct\u002Fstruct_usage","ch04\u002Fstruct\u002Fstruct_usage",{"title":93,"path":408,"stem":409,"icon":272},"\u002Fch04\u002Fsummary","ch04\u002Fsummary",{"title":411,"path":412,"stem":413,"icon":272},"联合体","\u002Fch04\u002Funion","ch04\u002Funion",{"title":415,"icon":416,"path":417,"stem":418,"children":419},"第五章 初探面向对象","i-lucide-copy","\u002Fch05","ch05",[420,422,426,430,434,438,442,446,450,454],{"title":415,"path":417,"stem":421,"icon":416},"ch05\u002Findex",{"title":423,"path":424,"stem":425,"icon":416},"构造函数","\u002Fch05\u002Fconstructor","ch05\u002Fconstructor",{"title":427,"path":428,"stem":429,"icon":416},"复制构造函数","\u002Fch05\u002Fcopy_constructor","ch05\u002Fcopy_constructor",{"title":431,"path":432,"stem":433,"icon":416},"预置构造函数","\u002Fch05\u002Fdefaulted_constructor","ch05\u002Fdefaulted_constructor",{"title":435,"path":436,"stem":437,"icon":416},"例子：简单的字符串","\u002Fch05\u002Feasy_string","ch05\u002Feasy_string",{"title":439,"path":440,"stem":441,"icon":416},"收尾工作","\u002Fch05\u002Fmisc","ch05\u002Fmisc",{"title":443,"path":444,"stem":445,"icon":416},"重载","\u002Fch05\u002Foverload","ch05\u002Foverload",{"title":447,"path":448,"stem":449,"icon":416},"引用","\u002Fch05\u002Freference","ch05\u002Freference",{"title":451,"path":452,"stem":453,"icon":416},"浅复制与深复制","\u002Fch05\u002Fshallow_deep_copy","ch05\u002Fshallow_deep_copy",{"title":93,"path":455,"stem":456,"icon":416},"\u002Fch05\u002Fsummary","ch05\u002Fsummary",{"title":458,"icon":459,"path":460,"stem":461,"children":462},"第六章 运算符重载","i-lucide-component","\u002Fch06","ch06",[463,465,469,473,477,481,485,489,493,497,501,504],{"title":458,"path":460,"stem":464,"icon":459},"ch06\u002Findex",{"title":466,"path":467,"stem":468,"icon":459},"赋值运算符重载","\u002Fch06\u002Fassignment_overload","ch06\u002Fassignment_overload",{"title":470,"path":471,"stem":472,"icon":459},"赋值与初始化","\u002Fch06\u002Fassignment_vs_construct","ch06\u002Fassignment_vs_construct",{"title":474,"path":475,"stem":476,"icon":459},"类型转换重载","\u002Fch06\u002Fcast_overload","ch06\u002Fcast_overload",{"title":478,"path":479,"stem":480,"icon":459},"只读成员函数","\u002Fch06\u002Fconst_member_function","ch06\u002Fconst_member_function",{"title":482,"path":483,"stem":484,"icon":459},"友元","\u002Fch06\u002Ffriend","ch06\u002Ffriend",{"title":486,"path":487,"stem":488,"icon":459},"类外定义成员函数","\u002Fch06\u002Fnoninline_member_function","ch06\u002Fnoninline_member_function",{"title":490,"path":491,"stem":492,"icon":459},"非成员的运算符重载","\u002Fch06\u002Fnonmember_operator","ch06\u002Fnonmember_operator",{"title":494,"path":495,"stem":496,"icon":459},"特殊运算符重载","\u002Fch06\u002Fspecial_operator_overload","ch06\u002Fspecial_operator_overload",{"title":498,"path":499,"stem":500,"icon":459},"静态成员","\u002Fch06\u002Fstatic_member","ch06\u002Fstatic_member",{"title":93,"path":502,"stem":503,"icon":459},"\u002Fch06\u002Fsummary","ch06\u002Fsummary",{"title":505,"path":506,"stem":507,"icon":459},"`this` 指针","\u002Fch06\u002Fthis","ch06\u002Fthis",{"title":509,"path":510,"stem":511,"children":512,"icon":190},"第七章 继承与多态","\u002Fch07","ch07\u002Findex",[513,514,541,545,549,580],{"title":509,"path":510,"stem":511,"icon":190},{"title":515,"icon":516,"path":517,"stem":518,"children":519},"继承关系","i-lucide-share","\u002Fch07\u002Finheritance","ch07\u002Finheritance\u002Findex",[520,521,525,529,533,537],{"title":515,"path":517,"stem":518,"icon":516},{"title":522,"path":523,"stem":524,"icon":516},"关于成员名","\u002Fch07\u002Finheritance\u002Fabout_member_name","ch07\u002Finheritance\u002Fabout_member_name",{"title":526,"path":527,"stem":528,"icon":516},"派生类的构造","\u002Fch07\u002Finheritance\u002Fderived_constructor","ch07\u002Finheritance\u002Fderived_constructor",{"title":530,"path":531,"stem":532,"icon":516},"继承中的隐式转换","\u002Fch07\u002Finheritance\u002Fimplicit_cast_in_inheritance","ch07\u002Finheritance\u002Fimplicit_cast_in_inheritance",{"title":534,"path":535,"stem":536,"icon":516},"其它小问题","\u002Fch07\u002Finheritance\u002Fmisc","ch07\u002Finheritance\u002Fmisc",{"title":538,"path":539,"stem":540,"icon":516},"保护成员","\u002Fch07\u002Finheritance\u002Fprotected_member","ch07\u002Finheritance\u002Fprotected_member",{"title":542,"path":543,"stem":544,"icon":190},"多重继承","\u002Fch07\u002Fmi","ch07\u002Fmi",{"title":546,"path":547,"stem":548,"icon":190},"简单的对象关系","\u002Fch07\u002Fobject_relationships","ch07\u002Fobject_relationships",{"title":550,"icon":551,"path":552,"stem":553,"children":554},"多态","i-lucide-refresh","\u002Fch07\u002Fpolymorphism","ch07\u002Fpolymorphism\u002Findex",[555,556,560,564,568,572,576],{"title":550,"path":552,"stem":553,"icon":551},{"title":557,"path":558,"stem":559,"icon":551},"抽象类","\u002Fch07\u002Fpolymorphism\u002Fabstract_class","ch07\u002Fpolymorphism\u002Fabstract_class",{"title":561,"path":562,"stem":563,"icon":551},"C++ 风格类型转换","\u002Fch07\u002Fpolymorphism\u002Fcpp_cast","ch07\u002Fpolymorphism\u002Fcpp_cast",{"title":565,"path":566,"stem":567,"icon":551},"`override` 与 `final`","\u002Fch07\u002Fpolymorphism\u002Foverride_and_final","ch07\u002Fpolymorphism\u002Foverride_and_final",{"title":569,"path":570,"stem":571,"icon":551},"RTTI","\u002Fch07\u002Fpolymorphism\u002Frtti","ch07\u002Fpolymorphism\u002Frtti",{"title":573,"path":574,"stem":575,"icon":551},"虚析构函数","\u002Fch07\u002Fpolymorphism\u002Fvirtual_destructor","ch07\u002Fpolymorphism\u002Fvirtual_destructor",{"title":577,"path":578,"stem":579,"icon":551},"虚函数","\u002Fch07\u002Fpolymorphism\u002Fvirtual_function","ch07\u002Fpolymorphism\u002Fvirtual_function",{"title":93,"path":581,"stem":582,"icon":190},"\u002Fch07\u002Fsummary","ch07\u002Fsummary",{"title":584,"icon":585,"path":586,"stem":587,"children":588},"第八章 模板基础","i-lucide-layout-template","\u002Fch08","ch08",[589,591,595,599,603,607,646],{"title":584,"path":586,"stem":590,"icon":585},"ch08\u002Findex",{"title":592,"path":593,"stem":594,"icon":585},"类模板","\u002Fch08\u002Fclass_template","ch08\u002Fclass_template",{"title":596,"path":597,"stem":598,"icon":585},"默认实参","\u002Fch08\u002Fdefault_argument","ch08\u002Fdefault_argument",{"title":600,"path":601,"stem":602,"icon":585},"函数模板","\u002Fch08\u002Ffunction_template","ch08\u002Ffunction_template",{"title":604,"path":605,"stem":606,"icon":585},"非类型模板参数","\u002Fch08\u002Fnontype_template_param","ch08\u002Fnontype_template_param",{"title":608,"icon":609,"path":610,"stem":611,"children":612},"STL 容器和迭代器","i-lucide-container","\u002Fch08\u002Fstl_containers","ch08\u002Fstl_containers\u002Findex",[613,614,618,622,626,630,634,638,642],{"title":608,"path":610,"stem":611,"icon":609},{"title":615,"path":616,"stem":617,"icon":609},"容器适配器","\u002Fch08\u002Fstl_containers\u002Fadaptors","ch08\u002Fstl_containers\u002Fadaptors",{"title":619,"path":620,"stem":621,"icon":609},"迭代器的概念","\u002Fch08\u002Fstl_containers\u002Fiterator_concept","ch08\u002Fstl_containers\u002Fiterator_concept",{"title":623,"path":624,"stem":625,"icon":609},"初识迭代器","\u002Fch08\u002Fstl_containers\u002Fiterator_glance","ch08\u002Fstl_containers\u002Fiterator_glance",{"title":627,"path":628,"stem":629,"icon":609},"迭代器的用途","\u002Fch08\u002Fstl_containers\u002Fiterator_usage","ch08\u002Fstl_containers\u002Fiterator_usage",{"title":631,"path":632,"stem":633,"icon":609},"`std::map`","\u002Fch08\u002Fstl_containers\u002Fmap","ch08\u002Fstl_containers\u002Fmap",{"title":635,"path":636,"stem":637,"icon":609},"其它顺序容器","\u002Fch08\u002Fstl_containers\u002Fother_sequence","ch08\u002Fstl_containers\u002Fother_sequence",{"title":639,"path":640,"stem":641,"icon":609},"`std::set`","\u002Fch08\u002Fstl_containers\u002Fset","ch08\u002Fstl_containers\u002Fset",{"title":643,"path":644,"stem":645,"icon":609},"`std::vector`","\u002Fch08\u002Fstl_containers\u002Fvector","ch08\u002Fstl_containers\u002Fvector",{"title":93,"path":647,"stem":648,"icon":585},"\u002Fch08\u002Fsummary","ch08\u002Fsummary",{"title":650,"icon":651,"path":652,"stem":653,"children":654},"第九章 链接","i-lucide-link","\u002Fch09","ch09",[655,657,661,665,669,673,677,681],{"title":650,"path":652,"stem":656,"icon":651},"ch09\u002Findex",{"title":658,"path":659,"stem":660,"icon":651},"C 中的链接","\u002Fch09\u002Fc_linking","ch09\u002Fc_linking",{"title":662,"path":663,"stem":664,"icon":651},"多文件编译实践","\u002Fch09\u002Fcompile_multiple_files","ch09\u002Fcompile_multiple_files",{"title":666,"path":667,"stem":668,"icon":651},"模板中的友元","\u002Fch09\u002Ffriend_in_template","ch09\u002Ffriend_in_template",{"title":670,"path":671,"stem":672,"icon":651},"内联","\u002Fch09\u002Finline","ch09\u002Finline",{"title":674,"path":675,"stem":676,"icon":651},"单一定义原则","\u002Fch09\u002Fodr","ch09\u002Fodr",{"title":678,"path":679,"stem":680,"icon":651},"符号和连接","\u002Fch09\u002Fsymbol_and_linkage","ch09\u002Fsymbol_and_linkage",{"title":682,"path":683,"stem":684,"icon":651},"模板的链接","\u002Fch09\u002Ftemplate_linking","ch09\u002Ftemplate_linking",{"title":686,"icon":687,"path":688,"stem":689,"children":690},"第十章 常用库介绍 \u003CBadge type=\"warning\" text=\"TBC\" \u002F>","i-lucide-hard-drive","\u002Fch10","ch10",[691,694,717,732,736,740],{"title":692,"path":688,"stem":693,"icon":687},"第十章 常用库介绍","ch10\u002Findex",{"title":695,"icon":696,"path":697,"stem":698,"children":699},"代数数据类型","i-lucide-shapes","\u002Fch10\u002Fadt","ch10\u002Fadt\u002Findex",[700,701,705,709,713],{"title":695,"path":697,"stem":698,"icon":696},{"title":702,"path":703,"stem":704,"icon":696},"顶类型 `std::any`","\u002Fch10\u002Fadt\u002Fany","ch10\u002Fadt\u002Fany",{"title":706,"path":707,"stem":708,"icon":696},"底类型","\u002Fch10\u002Fadt\u002Fnoreturn","ch10\u002Fadt\u002Fnoreturn",{"title":710,"path":711,"stem":712,"icon":696},"通用积类型 `std::tuple`","\u002Fch10\u002Fadt\u002Ftuple","ch10\u002Fadt\u002Ftuple",{"title":714,"path":715,"stem":716,"icon":696},"通用和类型 `std::variant`","\u002Fch10\u002Fadt\u002Fvariant","ch10\u002Fadt\u002Fvariant",{"title":718,"icon":719,"path":720,"stem":721,"children":722},"文件读写","i-lucide-file-text","\u002Fch10\u002Ffile_io","ch10\u002Ffile_io\u002Findex",[723,724,728],{"title":718,"path":720,"stem":721,"icon":719},{"title":725,"path":726,"stem":727,"icon":719},"C 风格输入输出","\u002Fch10\u002Ffile_io\u002Fc_io","ch10\u002Ffile_io\u002Fc_io",{"title":729,"path":730,"stem":731,"icon":719},"流式输入输出","\u002Fch10\u002Ffile_io\u002Fstream","ch10\u002Ffile_io\u002Fstream",{"title":733,"path":734,"stem":735,"icon":687},"文件系统","\u002Fch10\u002Ffilesystem","ch10\u002Ffilesystem",{"title":737,"path":738,"stem":739,"icon":687},"伪随机数生成","\u002Fch10\u002Frandom","ch10\u002Frandom",{"title":741,"path":742,"stem":743,"children":744,"icon":746},"移动语义与智能指针","\u002Fch10\u002Fsmart_pointer","ch10\u002Fsmart_pointer\u002Findex",[745,747,751,755,759,763],{"title":741,"path":742,"stem":743,"icon":746},"i-lucide-pointer",{"title":748,"path":749,"stem":750,"icon":746},"`std::move` 与转发引用","\u002Fch10\u002Fsmart_pointer\u002Fmove_and_forward","ch10\u002Fsmart_pointer\u002Fmove_and_forward",{"title":752,"path":753,"stem":754,"icon":746},"所有权","\u002Fch10\u002Fsmart_pointer\u002Fownership","ch10\u002Fsmart_pointer\u002Fownership",{"title":756,"path":757,"stem":758,"icon":746},"右值引用","\u002Fch10\u002Fsmart_pointer\u002Frvalue_reference","ch10\u002Fsmart_pointer\u002Frvalue_reference",{"title":760,"path":761,"stem":762,"icon":746},"`std::shared_ptr`","\u002Fch10\u002Fsmart_pointer\u002Fshared_ptr","ch10\u002Fsmart_pointer\u002Fshared_ptr",{"title":764,"path":765,"stem":766,"icon":746},"特殊成员函数","\u002Fch10\u002Fsmart_pointer\u002Fspecial_member_function","ch10\u002Fsmart_pointer\u002Fspecial_member_function",{"title":768,"icon":769,"path":770,"stem":771,"children":772},"第十一章 函数式编程","i-lucide-sparkles","\u002Fch11","ch11",[773,775,794,821,825],{"title":768,"path":770,"stem":774,"icon":769},"ch11\u002Findex",{"title":776,"icon":777,"path":778,"stem":779,"children":780},"语法进阶","i-lucide-graduation-cap","\u002Fch11\u002Fadvanced","ch11\u002Fadvanced\u002Findex",[781,782,786,790],{"title":776,"path":778,"stem":779,"icon":777},{"title":783,"path":784,"stem":785,"icon":777},"实参依赖查找","\u002Fch11\u002Fadvanced\u002Fadl","ch11\u002Fadvanced\u002Fadl",{"title":787,"path":788,"stem":789,"icon":777},"可调用","\u002Fch11\u002Fadvanced\u002Fcallable","ch11\u002Fadvanced\u002Fcallable",{"title":791,"path":792,"stem":793,"icon":777},"预置比较","\u002Fch11\u002Fadvanced\u002Fdefaulted_compare","ch11\u002Fadvanced\u002Fdefaulted_compare",{"title":795,"icon":796,"path":797,"stem":798,"children":799},"语法基础","i-lucide-book-text","\u002Fch11\u002Fgrammar","ch11\u002Fgrammar\u002Findex",[800,801,805,809,813,817],{"title":795,"path":797,"stem":798,"icon":796},{"title":802,"path":803,"stem":804,"icon":796},"闭包","\u002Fch11\u002Fgrammar\u002Fclosure","ch11\u002Fgrammar\u002Fclosure",{"title":806,"path":807,"stem":808,"icon":796},"函数也即对象","\u002Fch11\u002Fgrammar\u002Ffunction_as_object","ch11\u002Fgrammar\u002Ffunction_as_object",{"title":810,"path":811,"stem":812,"icon":796},"高阶函数","\u002Fch11\u002Fgrammar\u002Fhigher_order_function","ch11\u002Fgrammar\u002Fhigher_order_function",{"title":814,"path":815,"stem":816,"icon":796},"Lambda 表达式","\u002Fch11\u002Fgrammar\u002Flambda","ch11\u002Fgrammar\u002Flambda",{"title":818,"path":819,"stem":820,"icon":796},"Lambda 表达式捕获","\u002Fch11\u002Fgrammar\u002Flambda_capture","ch11\u002Fgrammar\u002Flambda_capture",{"title":822,"path":823,"stem":824,"icon":769},"`std::sort`","\u002Fch11\u002Fstd_sort","ch11\u002Fstd_sort",{"title":826,"icon":827,"path":828,"stem":829,"children":830},"STL 算法","i-lucide-sort-asc","\u002Fch11\u002Fstl_algorithms","ch11\u002Fstl_algorithms\u002Findex",[831,832,836,840,844,848,852,856,860],{"title":826,"path":828,"stem":829,"icon":827},{"title":833,"path":834,"stem":835,"icon":827},"迁移到 STLv1","\u002Fch11\u002Fstl_algorithms\u002Fcompare_with_legacy","ch11\u002Fstl_algorithms\u002Fcompare_with_legacy",{"title":837,"path":838,"stem":839,"icon":827},"复制","\u002Fch11\u002Fstl_algorithms\u002Fcopy","ch11\u002Fstl_algorithms\u002Fcopy",{"title":841,"path":842,"stem":843,"icon":827},"筛选","\u002Fch11\u002Fstl_algorithms\u002Ffilter","ch11\u002Fstl_algorithms\u002Ffilter",{"title":845,"path":846,"stem":847,"icon":827},"其它算法","\u002Fch11\u002Fstl_algorithms\u002Fothers","ch11\u002Fstl_algorithms\u002Fothers",{"title":849,"path":850,"stem":851,"icon":827},"初识范围","\u002Fch11\u002Fstl_algorithms\u002Frange","ch11\u002Fstl_algorithms\u002Frange",{"title":853,"path":854,"stem":855,"icon":827},"归约","\u002Fch11\u002Fstl_algorithms\u002Freduce","ch11\u002Fstl_algorithms\u002Freduce",{"title":857,"path":858,"stem":859,"icon":827},"排序","\u002Fch11\u002Fstl_algorithms\u002Fsort","ch11\u002Fstl_algorithms\u002Fsort",{"title":861,"path":862,"stem":863,"icon":827},"变换","\u002Fch11\u002Fstl_algorithms\u002Ftransform","ch11\u002Fstl_algorithms\u002Ftransform",{"title":865,"icon":866,"path":867,"stem":868,"children":869},"第十二章 模板","i-lucide-git-fork","\u002Fch12","ch12",[870,873,877,881,885],{"title":871,"path":867,"stem":872,"icon":866},"第十二章 模板进阶","ch12\u002Findex",{"title":874,"path":875,"stem":876},"C++20 概念","\u002Fch12\u002Fconcepts","ch12\u002Fconcepts",{"title":878,"path":879,"stem":880},"模板元编程","\u002Fch12\u002Fmetaprogramming","ch12\u002Fmetaprogramming",{"title":882,"path":883,"stem":884},"模板特化与偏特化","\u002Fch12\u002Fspecialization","ch12\u002Fspecialization",{"title":886,"icon":887,"path":888,"stem":889,"children":890},"静态派发","i-lucide-route","\u002Fch12\u002Fstatic_dispatch","ch12\u002Fstatic_dispatch\u002Findex",[891,892,896],{"title":886,"path":888,"stem":889},{"title":893,"path":894,"stem":895},"定制点","\u002Fch12\u002Fstatic_dispatch\u002Fcustomize_point","ch12\u002Fstatic_dispatch\u002Fcustomize_point",{"title":897,"path":898,"stem":899},"类型擦除","\u002Fch12\u002Fstatic_dispatch\u002Ftype_erasure","ch12\u002Fstatic_dispatch\u002Ftype_erasure",{"title":901,"path":902,"stem":903,"icon":6},"后记","\u002Fpostscript","postscript",{"title":905,"path":906,"stem":907,"icon":908},"技术信息","\u002Ftechnical_info","technical_info","i-lucide-info",{"id":910,"title":443,"body":911,"description":2673,"extension":2674,"links":2675,"meta":2676,"navigation":2677,"path":444,"seo":2678,"stem":445,"__hash__":2679},"docs\u002Fch05\u002Foverload.md",{"type":912,"value":913,"toc":2669},"minimark",[914,917,921,930,1021,1028,1088,1091,1212,1215,1295,1303,1615,1622,1625,1907,1934,1944,1947,1950,1953,1960,2120,2123,2147,2158,2327,2333,2458,2461,2468,2582,2585,2662,2665],[915,916,443],"h1",{"id":443},[918,919,443],"h2",{"id":920},"重载-1",[922,923,924,925,929],"p",{},"我们先把面向对象的话题放在一边，来看一看 C++ 的重载（Overload）机制。假设我有一个函数 ",[926,927,928],"code",{},"printInt","，它可以打印出一个整数的值：",[931,932,937],"pre",{"className":933,"code":934,"language":935,"meta":936,"style":936},"language-cpp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","void printInt(int i) {\n    std::cout \u003C\u003C \"Print an integer: \" \u003C\u003C i \u003C\u003C std::endl;\n}\n","cpp","",[926,938,939,969,1015],{"__ignoreMap":936},[940,941,944,948,952,956,959,963,966],"span",{"class":942,"line":943},"line",1,[940,945,947],{"class":946},"spNyl","void",[940,949,951],{"class":950},"s2Zo4"," printInt",[940,953,955],{"class":954},"sMK4o","(",[940,957,958],{"class":946},"int",[940,960,962],{"class":961},"sHdIc"," i",[940,964,965],{"class":954},")",[940,967,968],{"class":954}," {\n",[940,970,972,976,979,983,986,989,993,996,999,1002,1004,1007,1009,1012],{"class":942,"line":971},2,[940,973,975],{"class":974},"sBMFI","    std",[940,977,978],{"class":954},"::",[940,980,982],{"class":981},"sTEyZ","cout ",[940,984,985],{"class":954},"\u003C\u003C",[940,987,988],{"class":954}," \"",[940,990,992],{"class":991},"sfazB","Print an integer: ",[940,994,995],{"class":954},"\"",[940,997,998],{"class":954}," \u003C\u003C",[940,1000,1001],{"class":981}," i ",[940,1003,985],{"class":954},[940,1005,1006],{"class":974}," std",[940,1008,978],{"class":954},[940,1010,1011],{"class":981},"endl",[940,1013,1014],{"class":954},";\n",[940,1016,1018],{"class":942,"line":1017},3,[940,1019,1020],{"class":954},"}\n",[922,1022,1023,1024,1027],{},"然后我又有一个函数 ",[926,1025,1026],{},"printFloat","，它可以打印出一个浮点数的值：",[931,1029,1031],{"className":933,"code":1030,"language":935,"meta":936,"style":936},"void printFloat(double f) {\n    std::cout \u003C\u003C \"Print a float: \" \u003C\u003C f \u003C\u003C std::endl;\n}\n",[926,1032,1033,1052,1084],{"__ignoreMap":936},[940,1034,1035,1037,1040,1042,1045,1048,1050],{"class":942,"line":943},[940,1036,947],{"class":946},[940,1038,1039],{"class":950}," printFloat",[940,1041,955],{"class":954},[940,1043,1044],{"class":946},"double",[940,1046,1047],{"class":961}," f",[940,1049,965],{"class":954},[940,1051,968],{"class":954},[940,1053,1054,1056,1058,1060,1062,1064,1067,1069,1071,1074,1076,1078,1080,1082],{"class":942,"line":971},[940,1055,975],{"class":974},[940,1057,978],{"class":954},[940,1059,982],{"class":981},[940,1061,985],{"class":954},[940,1063,988],{"class":954},[940,1065,1066],{"class":991},"Print a float: ",[940,1068,995],{"class":954},[940,1070,998],{"class":954},[940,1072,1073],{"class":981}," f ",[940,1075,985],{"class":954},[940,1077,1006],{"class":974},[940,1079,978],{"class":954},[940,1081,1011],{"class":981},[940,1083,1014],{"class":954},[940,1085,1086],{"class":942,"line":1017},[940,1087,1020],{"class":954},[922,1089,1090],{},"又比如还有一堆这样类似的函数：",[931,1092,1094],{"className":933,"code":1093,"language":935,"meta":936,"style":936},"void printChar(char c) {\n    std::cout \u003C\u003C \"Print a character: \" \u003C\u003C c \u003C\u003C std::endl;\n}\nvoid printCString(const char* s) {\n    std::cout \u003C\u003C \"Print a string: \" \u003C\u003C s \u003C\u003C std::endl;\n}\n",[926,1095,1096,1115,1147,1151,1174,1207],{"__ignoreMap":936},[940,1097,1098,1100,1103,1105,1108,1111,1113],{"class":942,"line":943},[940,1099,947],{"class":946},[940,1101,1102],{"class":950}," printChar",[940,1104,955],{"class":954},[940,1106,1107],{"class":946},"char",[940,1109,1110],{"class":961}," c",[940,1112,965],{"class":954},[940,1114,968],{"class":954},[940,1116,1117,1119,1121,1123,1125,1127,1130,1132,1134,1137,1139,1141,1143,1145],{"class":942,"line":971},[940,1118,975],{"class":974},[940,1120,978],{"class":954},[940,1122,982],{"class":981},[940,1124,985],{"class":954},[940,1126,988],{"class":954},[940,1128,1129],{"class":991},"Print a character: ",[940,1131,995],{"class":954},[940,1133,998],{"class":954},[940,1135,1136],{"class":981}," c ",[940,1138,985],{"class":954},[940,1140,1006],{"class":974},[940,1142,978],{"class":954},[940,1144,1011],{"class":981},[940,1146,1014],{"class":954},[940,1148,1149],{"class":942,"line":1017},[940,1150,1020],{"class":954},[940,1152,1154,1156,1159,1161,1164,1167,1170,1172],{"class":942,"line":1153},4,[940,1155,947],{"class":946},[940,1157,1158],{"class":950}," printCString",[940,1160,955],{"class":954},[940,1162,1163],{"class":946},"const",[940,1165,1166],{"class":946}," char*",[940,1168,1169],{"class":961}," s",[940,1171,965],{"class":954},[940,1173,968],{"class":954},[940,1175,1177,1179,1181,1183,1185,1187,1190,1192,1194,1197,1199,1201,1203,1205],{"class":942,"line":1176},5,[940,1178,975],{"class":974},[940,1180,978],{"class":954},[940,1182,982],{"class":981},[940,1184,985],{"class":954},[940,1186,988],{"class":954},[940,1188,1189],{"class":991},"Print a string: ",[940,1191,995],{"class":954},[940,1193,998],{"class":954},[940,1195,1196],{"class":981}," s ",[940,1198,985],{"class":954},[940,1200,1006],{"class":974},[940,1202,978],{"class":954},[940,1204,1011],{"class":981},[940,1206,1014],{"class":954},[940,1208,1210],{"class":942,"line":1209},6,[940,1211,1020],{"class":954},[922,1213,1214],{},"那么，如果我要使用这些函数，我需要根据我要输出的数据类型来选择对应的函数名字：",[931,1216,1218],{"className":933,"code":1217,"language":935,"meta":936,"style":936},"int main() {\n    printInt(42);\n    printFloat(3.14);\n    printChar('@');\n    printCString(\"Hello\");\n}\n",[926,1219,1220,1232,1246,1258,1275,1291],{"__ignoreMap":936},[940,1221,1222,1224,1227,1230],{"class":942,"line":943},[940,1223,958],{"class":946},[940,1225,1226],{"class":950}," main",[940,1228,1229],{"class":954},"()",[940,1231,968],{"class":954},[940,1233,1234,1237,1239,1243],{"class":942,"line":971},[940,1235,1236],{"class":950},"    printInt",[940,1238,955],{"class":954},[940,1240,1242],{"class":1241},"sbssI","42",[940,1244,1245],{"class":954},");\n",[940,1247,1248,1251,1253,1256],{"class":942,"line":1017},[940,1249,1250],{"class":950},"    printFloat",[940,1252,955],{"class":954},[940,1254,1255],{"class":1241},"3.14",[940,1257,1245],{"class":954},[940,1259,1260,1263,1265,1268,1271,1273],{"class":942,"line":1153},[940,1261,1262],{"class":950},"    printChar",[940,1264,955],{"class":954},[940,1266,1267],{"class":954},"'",[940,1269,1270],{"class":991},"@",[940,1272,1267],{"class":954},[940,1274,1245],{"class":954},[940,1276,1277,1280,1282,1284,1287,1289],{"class":942,"line":1176},[940,1278,1279],{"class":950},"    printCString",[940,1281,955],{"class":954},[940,1283,995],{"class":954},[940,1285,1286],{"class":991},"Hello",[940,1288,995],{"class":954},[940,1290,1245],{"class":954},[940,1292,1293],{"class":942,"line":1209},[940,1294,1020],{"class":954},[922,1296,1297,1298,1302],{},"而 C++ 的重载机制就是说，像这样功能类似，但",[1299,1300,1301],"strong",{},"参数不同","的函数们可以共用一个名字。比如：",[931,1304,1306],{"className":933,"code":1305,"language":935,"meta":936,"style":936},"#include \u003Ciostream>\n\u002F\u002F 以下四个函数名字都是 print，但接受的形参类型不同\nvoid print(int i) {\n    std::cout \u003C\u003C \"Print an integer: \" \u003C\u003C i \u003C\u003C std::endl;\n}\nvoid print(double f) {\n    std::cout \u003C\u003C \"Print a float: \" \u003C\u003C f \u003C\u003C std::endl;\n}\nvoid print(char c) {\n    std::cout \u003C\u003C \"Print a character: \" \u003C\u003C c \u003C\u003C std::endl;\n}\nvoid print(const char* s) {\n    std::cout \u003C\u003C \"Print a string: \" \u003C\u003C s \u003C\u003C std::endl;\n}\nint main() {\n    \u002F\u002F 调用时，编译器会根据实参类型选择对应的函数\n    print(42);\n    print(3.14);\n    print('@');\n    print(\"Hello\");\n}\n",[926,1307,1308,1323,1329,1346,1376,1380,1396,1427,1432,1449,1480,1485,1504,1535,1540,1551,1557,1569,1580,1595,1610],{"__ignoreMap":936},[940,1309,1310,1314,1317,1320],{"class":942,"line":943},[940,1311,1313],{"class":1312},"s7zQu","#include",[940,1315,1316],{"class":954}," \u003C",[940,1318,1319],{"class":991},"iostream",[940,1321,1322],{"class":954},">\n",[940,1324,1325],{"class":942,"line":971},[940,1326,1328],{"class":1327},"sHwdD","\u002F\u002F 以下四个函数名字都是 print，但接受的形参类型不同\n",[940,1330,1331,1333,1336,1338,1340,1342,1344],{"class":942,"line":1017},[940,1332,947],{"class":946},[940,1334,1335],{"class":950}," print",[940,1337,955],{"class":954},[940,1339,958],{"class":946},[940,1341,962],{"class":961},[940,1343,965],{"class":954},[940,1345,968],{"class":954},[940,1347,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374],{"class":942,"line":1153},[940,1349,975],{"class":974},[940,1351,978],{"class":954},[940,1353,982],{"class":981},[940,1355,985],{"class":954},[940,1357,988],{"class":954},[940,1359,992],{"class":991},[940,1361,995],{"class":954},[940,1363,998],{"class":954},[940,1365,1001],{"class":981},[940,1367,985],{"class":954},[940,1369,1006],{"class":974},[940,1371,978],{"class":954},[940,1373,1011],{"class":981},[940,1375,1014],{"class":954},[940,1377,1378],{"class":942,"line":1176},[940,1379,1020],{"class":954},[940,1381,1382,1384,1386,1388,1390,1392,1394],{"class":942,"line":1209},[940,1383,947],{"class":946},[940,1385,1335],{"class":950},[940,1387,955],{"class":954},[940,1389,1044],{"class":946},[940,1391,1047],{"class":961},[940,1393,965],{"class":954},[940,1395,968],{"class":954},[940,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425],{"class":942,"line":1398},7,[940,1400,975],{"class":974},[940,1402,978],{"class":954},[940,1404,982],{"class":981},[940,1406,985],{"class":954},[940,1408,988],{"class":954},[940,1410,1066],{"class":991},[940,1412,995],{"class":954},[940,1414,998],{"class":954},[940,1416,1073],{"class":981},[940,1418,985],{"class":954},[940,1420,1006],{"class":974},[940,1422,978],{"class":954},[940,1424,1011],{"class":981},[940,1426,1014],{"class":954},[940,1428,1430],{"class":942,"line":1429},8,[940,1431,1020],{"class":954},[940,1433,1435,1437,1439,1441,1443,1445,1447],{"class":942,"line":1434},9,[940,1436,947],{"class":946},[940,1438,1335],{"class":950},[940,1440,955],{"class":954},[940,1442,1107],{"class":946},[940,1444,1110],{"class":961},[940,1446,965],{"class":954},[940,1448,968],{"class":954},[940,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478],{"class":942,"line":1451},10,[940,1453,975],{"class":974},[940,1455,978],{"class":954},[940,1457,982],{"class":981},[940,1459,985],{"class":954},[940,1461,988],{"class":954},[940,1463,1129],{"class":991},[940,1465,995],{"class":954},[940,1467,998],{"class":954},[940,1469,1136],{"class":981},[940,1471,985],{"class":954},[940,1473,1006],{"class":974},[940,1475,978],{"class":954},[940,1477,1011],{"class":981},[940,1479,1014],{"class":954},[940,1481,1483],{"class":942,"line":1482},11,[940,1484,1020],{"class":954},[940,1486,1488,1490,1492,1494,1496,1498,1500,1502],{"class":942,"line":1487},12,[940,1489,947],{"class":946},[940,1491,1335],{"class":950},[940,1493,955],{"class":954},[940,1495,1163],{"class":946},[940,1497,1166],{"class":946},[940,1499,1169],{"class":961},[940,1501,965],{"class":954},[940,1503,968],{"class":954},[940,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533],{"class":942,"line":1506},13,[940,1508,975],{"class":974},[940,1510,978],{"class":954},[940,1512,982],{"class":981},[940,1514,985],{"class":954},[940,1516,988],{"class":954},[940,1518,1189],{"class":991},[940,1520,995],{"class":954},[940,1522,998],{"class":954},[940,1524,1196],{"class":981},[940,1526,985],{"class":954},[940,1528,1006],{"class":974},[940,1530,978],{"class":954},[940,1532,1011],{"class":981},[940,1534,1014],{"class":954},[940,1536,1538],{"class":942,"line":1537},14,[940,1539,1020],{"class":954},[940,1541,1543,1545,1547,1549],{"class":942,"line":1542},15,[940,1544,958],{"class":946},[940,1546,1226],{"class":950},[940,1548,1229],{"class":954},[940,1550,968],{"class":954},[940,1552,1554],{"class":942,"line":1553},16,[940,1555,1556],{"class":1327},"    \u002F\u002F 调用时，编译器会根据实参类型选择对应的函数\n",[940,1558,1560,1563,1565,1567],{"class":942,"line":1559},17,[940,1561,1562],{"class":950},"    print",[940,1564,955],{"class":954},[940,1566,1242],{"class":1241},[940,1568,1245],{"class":954},[940,1570,1572,1574,1576,1578],{"class":942,"line":1571},18,[940,1573,1562],{"class":950},[940,1575,955],{"class":954},[940,1577,1255],{"class":1241},[940,1579,1245],{"class":954},[940,1581,1583,1585,1587,1589,1591,1593],{"class":942,"line":1582},19,[940,1584,1562],{"class":950},[940,1586,955],{"class":954},[940,1588,1267],{"class":954},[940,1590,1270],{"class":991},[940,1592,1267],{"class":954},[940,1594,1245],{"class":954},[940,1596,1598,1600,1602,1604,1606,1608],{"class":942,"line":1597},20,[940,1599,1562],{"class":950},[940,1601,955],{"class":954},[940,1603,995],{"class":954},[940,1605,1286],{"class":991},[940,1607,995],{"class":954},[940,1609,1245],{"class":954},[940,1611,1613],{"class":942,"line":1612},21,[940,1614,1020],{"class":954},[922,1616,1617,1618,1621],{},"这就是重载机制的体现了。我们有时会这样说，上面代码中 ",[926,1619,1620],{},"print"," 函数有 4 个重载；某一行函数调用语句调用了第几个重载。",[922,1623,1624],{},"再举一个更实际的例子。我们有如下求最大值的函数：",[931,1626,1628],{"className":933,"code":1627,"language":935,"meta":936,"style":936},"int max(int a, int b) {          \u002F\u002F 第一个重载\n    return a > b ? a : b;\n}\ndouble max(double a, double b) { \u002F\u002F 第二个重载\n    return a > b ? a : b;\n}\nint max(int a, int b, int c) {   \u002F\u002F 第三个重载\n    int ab = max(a, b); \u002F\u002F 不是递归，是调用第一个重载\n    return ab > c ? ab : c;\n}\nint main() {\n    max(42, 56);     \u002F\u002F 调用第一个重载 int max(int, int);\n    max(3.14, 2.73); \u002F\u002F 调用第二个重载 double max(double, double);\n    max(4, 5, 6);    \u002F\u002F 调用第三个重载 int max(int, int, int);\n\u002F\u002F  max(42, 3.14);   \u002F\u002F 编译错误：无法判断哪一个重载\n}\n",[926,1629,1630,1661,1687,1691,1717,1737,1741,1772,1800,1820,1824,1834,1853,1871,1895,1903],{"__ignoreMap":936},[940,1631,1632,1634,1637,1639,1641,1644,1647,1650,1653,1655,1658],{"class":942,"line":943},[940,1633,958],{"class":946},[940,1635,1636],{"class":950}," max",[940,1638,955],{"class":954},[940,1640,958],{"class":946},[940,1642,1643],{"class":961}," a",[940,1645,1646],{"class":954},",",[940,1648,1649],{"class":946}," int",[940,1651,1652],{"class":961}," b",[940,1654,965],{"class":954},[940,1656,1657],{"class":954}," {",[940,1659,1660],{"class":1327},"          \u002F\u002F 第一个重载\n",[940,1662,1663,1666,1669,1672,1675,1678,1680,1683,1685],{"class":942,"line":971},[940,1664,1665],{"class":1312},"    return",[940,1667,1668],{"class":981}," a ",[940,1670,1671],{"class":954},">",[940,1673,1674],{"class":981}," b ",[940,1676,1677],{"class":954},"?",[940,1679,1668],{"class":981},[940,1681,1682],{"class":954},":",[940,1684,1652],{"class":981},[940,1686,1014],{"class":954},[940,1688,1689],{"class":942,"line":1017},[940,1690,1020],{"class":954},[940,1692,1693,1695,1697,1699,1701,1703,1705,1708,1710,1712,1714],{"class":942,"line":1153},[940,1694,1044],{"class":946},[940,1696,1636],{"class":950},[940,1698,955],{"class":954},[940,1700,1044],{"class":946},[940,1702,1643],{"class":961},[940,1704,1646],{"class":954},[940,1706,1707],{"class":946}," double",[940,1709,1652],{"class":961},[940,1711,965],{"class":954},[940,1713,1657],{"class":954},[940,1715,1716],{"class":1327}," \u002F\u002F 第二个重载\n",[940,1718,1719,1721,1723,1725,1727,1729,1731,1733,1735],{"class":942,"line":1176},[940,1720,1665],{"class":1312},[940,1722,1668],{"class":981},[940,1724,1671],{"class":954},[940,1726,1674],{"class":981},[940,1728,1677],{"class":954},[940,1730,1668],{"class":981},[940,1732,1682],{"class":954},[940,1734,1652],{"class":981},[940,1736,1014],{"class":954},[940,1738,1739],{"class":942,"line":1209},[940,1740,1020],{"class":954},[940,1742,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769],{"class":942,"line":1398},[940,1744,958],{"class":946},[940,1746,1636],{"class":950},[940,1748,955],{"class":954},[940,1750,958],{"class":946},[940,1752,1643],{"class":961},[940,1754,1646],{"class":954},[940,1756,1649],{"class":946},[940,1758,1652],{"class":961},[940,1760,1646],{"class":954},[940,1762,1649],{"class":946},[940,1764,1110],{"class":961},[940,1766,965],{"class":954},[940,1768,1657],{"class":954},[940,1770,1771],{"class":1327},"   \u002F\u002F 第三个重载\n",[940,1773,1774,1777,1780,1783,1785,1787,1790,1792,1794,1797],{"class":942,"line":1429},[940,1775,1776],{"class":946},"    int",[940,1778,1779],{"class":981}," ab ",[940,1781,1782],{"class":954},"=",[940,1784,1636],{"class":950},[940,1786,955],{"class":954},[940,1788,1789],{"class":981},"a",[940,1791,1646],{"class":954},[940,1793,1652],{"class":981},[940,1795,1796],{"class":954},");",[940,1798,1799],{"class":1327}," \u002F\u002F 不是递归，是调用第一个重载\n",[940,1801,1802,1804,1806,1808,1810,1812,1814,1816,1818],{"class":942,"line":1434},[940,1803,1665],{"class":1312},[940,1805,1779],{"class":981},[940,1807,1671],{"class":954},[940,1809,1136],{"class":981},[940,1811,1677],{"class":954},[940,1813,1779],{"class":981},[940,1815,1682],{"class":954},[940,1817,1110],{"class":981},[940,1819,1014],{"class":954},[940,1821,1822],{"class":942,"line":1451},[940,1823,1020],{"class":954},[940,1825,1826,1828,1830,1832],{"class":942,"line":1482},[940,1827,958],{"class":946},[940,1829,1226],{"class":950},[940,1831,1229],{"class":954},[940,1833,968],{"class":954},[940,1835,1836,1839,1841,1843,1845,1848,1850],{"class":942,"line":1487},[940,1837,1838],{"class":950},"    max",[940,1840,955],{"class":954},[940,1842,1242],{"class":1241},[940,1844,1646],{"class":954},[940,1846,1847],{"class":1241}," 56",[940,1849,1796],{"class":954},[940,1851,1852],{"class":1327},"     \u002F\u002F 调用第一个重载 int max(int, int);\n",[940,1854,1855,1857,1859,1861,1863,1866,1868],{"class":942,"line":1506},[940,1856,1838],{"class":950},[940,1858,955],{"class":954},[940,1860,1255],{"class":1241},[940,1862,1646],{"class":954},[940,1864,1865],{"class":1241}," 2.73",[940,1867,1796],{"class":954},[940,1869,1870],{"class":1327}," \u002F\u002F 调用第二个重载 double max(double, double);\n",[940,1872,1873,1875,1877,1880,1882,1885,1887,1890,1892],{"class":942,"line":1537},[940,1874,1838],{"class":950},[940,1876,955],{"class":954},[940,1878,1879],{"class":1241},"4",[940,1881,1646],{"class":954},[940,1883,1884],{"class":1241}," 5",[940,1886,1646],{"class":954},[940,1888,1889],{"class":1241}," 6",[940,1891,1796],{"class":954},[940,1893,1894],{"class":1327},"    \u002F\u002F 调用第三个重载 int max(int, int, int);\n",[940,1896,1897,1900],{"class":942,"line":1542},[940,1898,1899],{"class":1327},"\u002F\u002F  max(42, 3.14);",[940,1901,1902],{"class":1327},"   \u002F\u002F 编译错误：无法判断哪一个重载\n",[940,1904,1905],{"class":942,"line":1553},[940,1906,1020],{"class":954},[922,1908,1909,1910,1913,1914,1917,1918,1921,1922,1925,1926,1929,1930,1933],{},"这里，",[926,1911,1912],{},"max"," 函数拥有三个重载，然后 ",[926,1915,1916],{},"main"," 函数中依次调用这三个重载。编译器会根据实参的类型和个数来判断应该调用哪一个重载。但第 15 行的调用会导致编译错误，因为实参列表 ",[926,1919,1920],{},"(42, 3.14)"," 有歧义：它到底对应 ",[926,1923,1924],{},"(int, int)"," 这个重载，还是 ",[926,1927,1928],{},"(double, double)"," 呢？在这种情形下，编译器在会采用隐式转换更“少”的方案。然而此时两个重载都需要一次隐式转换，它们是等同的。这时，编译器就会给出一个错误，告诉说 ",[926,1931,1932],{},"max(42, 3.14);"," 这条语句有歧义。",[922,1935,1936,1937,1943],{},"编译器确定重载的这个过程实际上是非常",[1789,1938,1942],{"href":1939,"rel":1940},"https:\u002F\u002Fzh.cppreference.com\u002Fw\u002Fcpp\u002Flanguage\u002Foverload_resolution",[1941],"nofollow","复杂且晦涩难懂","的。因此我们并不建议在函数调用语句时发生隐式转换。",[922,1945,1946],{},"最后需要注意的就是，重载是指若干个同名函数定义可以拥有不同的参数列表。如果两个函数定义只有返回值类型不同，而形参列表却一样，那显然编译器不可能通过实参类型来判断调用哪一个重载。",[918,1948,1949],{"id":1949},"构造函数重载",[922,1951,1952],{},"成员函数和普通函数一样，也可以拥有多个重载。所以构造函数作为特殊的成员函数，也可以接受多个重载。",[922,1954,1955,1956,1959],{},"回到之前的 ",[926,1957,1958],{},"String"," 结构体。我们已经有了这样的构造函数：",[931,1961,1963],{"className":933,"code":1962,"language":935,"meta":936,"style":936},"struct String {\n    String(const char* initVal) {\n        len = std::strlen(initVal);\n        str = new char[len + 1];\n        for (unsigned i{0}; i \u003C= len; i++)\n            str[i] = initVal[i];\n    }\n    \u002F\u002F [...]\n};\n",[926,1964,1965,1975,1993,2015,2043,2081,2105,2110,2115],{"__ignoreMap":936},[940,1966,1967,1970,1973],{"class":942,"line":943},[940,1968,1969],{"class":946},"struct",[940,1971,1972],{"class":974}," String",[940,1974,968],{"class":954},[940,1976,1977,1980,1982,1984,1986,1989,1991],{"class":942,"line":971},[940,1978,1979],{"class":950},"    String",[940,1981,955],{"class":954},[940,1983,1163],{"class":946},[940,1985,1166],{"class":946},[940,1987,1988],{"class":961}," initVal",[940,1990,965],{"class":954},[940,1992,968],{"class":954},[940,1994,1995,1999,2001,2003,2005,2008,2010,2013],{"class":942,"line":1017},[940,1996,1998],{"class":1997},"swJcz","        len ",[940,2000,1782],{"class":954},[940,2002,1006],{"class":974},[940,2004,978],{"class":954},[940,2006,2007],{"class":950},"strlen",[940,2009,955],{"class":954},[940,2011,2012],{"class":1997},"initVal",[940,2014,1245],{"class":954},[940,2016,2017,2020,2022,2025,2028,2031,2034,2037,2040],{"class":942,"line":1153},[940,2018,2019],{"class":1997},"        str ",[940,2021,1782],{"class":954},[940,2023,2024],{"class":954}," new",[940,2026,2027],{"class":946}," char",[940,2029,2030],{"class":954},"[",[940,2032,2033],{"class":1997},"len ",[940,2035,2036],{"class":954},"+",[940,2038,2039],{"class":1241}," 1",[940,2041,2042],{"class":954},"];\n",[940,2044,2045,2048,2051,2054,2057,2060,2063,2066,2068,2071,2074,2076,2078],{"class":942,"line":1176},[940,2046,2047],{"class":1312},"        for",[940,2049,2050],{"class":954}," (",[940,2052,2053],{"class":946},"unsigned",[940,2055,2056],{"class":1997}," i{",[940,2058,2059],{"class":1241},"0",[940,2061,2062],{"class":1997},"}",[940,2064,2065],{"class":954},";",[940,2067,1001],{"class":1997},[940,2069,2070],{"class":954},"\u003C=",[940,2072,2073],{"class":1997}," len",[940,2075,2065],{"class":954},[940,2077,962],{"class":1997},[940,2079,2080],{"class":954},"++)\n",[940,2082,2083,2086,2088,2091,2094,2097,2099,2101,2103],{"class":942,"line":1209},[940,2084,2085],{"class":981},"            str",[940,2087,2030],{"class":954},[940,2089,2090],{"class":1997},"i",[940,2092,2093],{"class":954},"]",[940,2095,2096],{"class":954}," =",[940,2098,1988],{"class":981},[940,2100,2030],{"class":954},[940,2102,2090],{"class":1997},[940,2104,2042],{"class":954},[940,2106,2107],{"class":942,"line":1398},[940,2108,2109],{"class":954},"    }\n",[940,2111,2112],{"class":942,"line":1429},[940,2113,2114],{"class":1327},"    \u002F\u002F [...]\n",[940,2116,2117],{"class":942,"line":1434},[940,2118,2119],{"class":954},"};\n",[922,2121,2122],{},"我们首先添加这样一个重载",[931,2124,2126],{"className":933,"code":2125,"language":935,"meta":936,"style":936},"String(unsigned num, char c);\n",[926,2127,2128],{"__ignoreMap":936},[940,2129,2130,2132,2134,2136,2139,2141,2143,2145],{"class":942,"line":943},[940,2131,1958],{"class":950},[940,2133,955],{"class":954},[940,2135,2053],{"class":946},[940,2137,2138],{"class":981}," num",[940,2140,1646],{"class":954},[940,2142,2027],{"class":946},[940,2144,1110],{"class":981},[940,2146,1245],{"class":954},[922,2148,2149,2150,2153,2154,2157],{},"这样，构造出一个 ",[926,2151,2152],{},"num"," 位长的字符串，每一个字符都是 ",[926,2155,2156],{},"c","。它的实现是：",[931,2159,2161],{"className":933,"code":2160,"language":935,"meta":936,"style":936},"struct String {\n    String(unsigned num, char c) { \u002F\u002F 新的重载（#1）\n        len = num;\n        str = new char[num + 1];\n        for (unsigned i{0}; i \u003C= num; i++)\n            str[i] = c;  \u002F\u002F 前 num 位赋值为 c\n        str[num] = '\\0'; \u002F\u002F 最后是个 '\\0' 结尾\n    }\n    String(const char* initVal); \u002F\u002F 同上（#2）\n    \u002F\u002F [...]\n};\n",[926,2162,2163,2171,2194,2204,2225,2253,2272,2298,2302,2319,2323],{"__ignoreMap":936},[940,2164,2165,2167,2169],{"class":942,"line":943},[940,2166,1969],{"class":946},[940,2168,1972],{"class":974},[940,2170,968],{"class":954},[940,2172,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191],{"class":942,"line":971},[940,2174,1979],{"class":950},[940,2176,955],{"class":954},[940,2178,2053],{"class":946},[940,2180,2138],{"class":961},[940,2182,1646],{"class":954},[940,2184,2027],{"class":946},[940,2186,1110],{"class":961},[940,2188,965],{"class":954},[940,2190,1657],{"class":954},[940,2192,2193],{"class":1327}," \u002F\u002F 新的重载（#1）\n",[940,2195,2196,2198,2200,2202],{"class":942,"line":1017},[940,2197,1998],{"class":1997},[940,2199,1782],{"class":954},[940,2201,2138],{"class":1997},[940,2203,1014],{"class":954},[940,2205,2206,2208,2210,2212,2214,2216,2219,2221,2223],{"class":942,"line":1153},[940,2207,2019],{"class":1997},[940,2209,1782],{"class":954},[940,2211,2024],{"class":954},[940,2213,2027],{"class":946},[940,2215,2030],{"class":954},[940,2217,2218],{"class":1997},"num ",[940,2220,2036],{"class":954},[940,2222,2039],{"class":1241},[940,2224,2042],{"class":954},[940,2226,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251],{"class":942,"line":1176},[940,2228,2047],{"class":1312},[940,2230,2050],{"class":954},[940,2232,2053],{"class":946},[940,2234,2056],{"class":1997},[940,2236,2059],{"class":1241},[940,2238,2062],{"class":1997},[940,2240,2065],{"class":954},[940,2242,1001],{"class":1997},[940,2244,2070],{"class":954},[940,2246,2138],{"class":1997},[940,2248,2065],{"class":954},[940,2250,962],{"class":1997},[940,2252,2080],{"class":954},[940,2254,2255,2257,2259,2261,2263,2265,2267,2269],{"class":942,"line":1209},[940,2256,2085],{"class":981},[940,2258,2030],{"class":954},[940,2260,2090],{"class":1997},[940,2262,2093],{"class":954},[940,2264,2096],{"class":954},[940,2266,1110],{"class":1997},[940,2268,2065],{"class":954},[940,2270,2271],{"class":1327},"  \u002F\u002F 前 num 位赋值为 c\n",[940,2273,2274,2277,2279,2281,2283,2285,2288,2291,2293,2295],{"class":942,"line":1398},[940,2275,2276],{"class":981},"        str",[940,2278,2030],{"class":954},[940,2280,2152],{"class":1997},[940,2282,2093],{"class":954},[940,2284,2096],{"class":954},[940,2286,2287],{"class":954}," '",[940,2289,2290],{"class":981},"\\0",[940,2292,1267],{"class":954},[940,2294,2065],{"class":954},[940,2296,2297],{"class":1327}," \u002F\u002F 最后是个 '\\0' 结尾\n",[940,2299,2300],{"class":942,"line":1429},[940,2301,2109],{"class":954},[940,2303,2304,2306,2308,2310,2312,2314,2316],{"class":942,"line":1434},[940,2305,1979],{"class":950},[940,2307,955],{"class":954},[940,2309,1163],{"class":946},[940,2311,1166],{"class":946},[940,2313,1988],{"class":961},[940,2315,1796],{"class":954},[940,2317,2318],{"class":1327}," \u002F\u002F 同上（#2）\n",[940,2320,2321],{"class":942,"line":1451},[940,2322,2114],{"class":1327},[940,2324,2325],{"class":942,"line":1482},[940,2326,2119],{"class":954},[922,2328,2329,2330,2332],{},"然后在 ",[926,2331,1916],{}," 函数中调用这个新添加的重载：",[931,2334,2336],{"className":933,"code":2335,"language":935,"meta":936,"style":936},"int main() {\n    String a(5, 'x');  \u002F\u002F 调用重载 #1\n    String b(\"Hello\"); \u002F\u002F 调用重载 #2\n    std::cout \u003C\u003C a.str \u003C\u003C std::endl; \u002F\u002F \"xxxxx\"\n    std::cout \u003C\u003C b.str \u003C\u003C std::endl; \u002F\u002F \"hello\"\n}\n",[926,2337,2338,2348,2374,2394,2425,2454],{"__ignoreMap":936},[940,2339,2340,2342,2344,2346],{"class":942,"line":943},[940,2341,958],{"class":946},[940,2343,1226],{"class":950},[940,2345,1229],{"class":954},[940,2347,968],{"class":954},[940,2349,2350,2353,2355,2357,2360,2362,2364,2367,2369,2371],{"class":942,"line":971},[940,2351,2352],{"class":981},"    String ",[940,2354,1789],{"class":950},[940,2356,955],{"class":954},[940,2358,2359],{"class":1241},"5",[940,2361,1646],{"class":954},[940,2363,2287],{"class":954},[940,2365,2366],{"class":991},"x",[940,2368,1267],{"class":954},[940,2370,1796],{"class":954},[940,2372,2373],{"class":1327},"  \u002F\u002F 调用重载 #1\n",[940,2375,2376,2378,2381,2383,2385,2387,2389,2391],{"class":942,"line":1017},[940,2377,2352],{"class":981},[940,2379,2380],{"class":950},"b",[940,2382,955],{"class":954},[940,2384,995],{"class":954},[940,2386,1286],{"class":991},[940,2388,995],{"class":954},[940,2390,1796],{"class":954},[940,2392,2393],{"class":1327}," \u002F\u002F 调用重载 #2\n",[940,2395,2396,2398,2400,2402,2404,2406,2409,2412,2414,2416,2418,2420,2422],{"class":942,"line":1153},[940,2397,975],{"class":974},[940,2399,978],{"class":954},[940,2401,982],{"class":981},[940,2403,985],{"class":954},[940,2405,1643],{"class":981},[940,2407,2408],{"class":954},".",[940,2410,2411],{"class":981},"str ",[940,2413,985],{"class":954},[940,2415,1006],{"class":974},[940,2417,978],{"class":954},[940,2419,1011],{"class":981},[940,2421,2065],{"class":954},[940,2423,2424],{"class":1327}," \u002F\u002F \"xxxxx\"\n",[940,2426,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451],{"class":942,"line":1176},[940,2428,975],{"class":974},[940,2430,978],{"class":954},[940,2432,982],{"class":981},[940,2434,985],{"class":954},[940,2436,1652],{"class":981},[940,2438,2408],{"class":954},[940,2440,2411],{"class":981},[940,2442,985],{"class":954},[940,2444,1006],{"class":974},[940,2446,978],{"class":954},[940,2448,1011],{"class":981},[940,2450,2065],{"class":954},[940,2452,2453],{"class":1327}," \u002F\u002F \"hello\"\n",[940,2455,2456],{"class":942,"line":1209},[940,2457,1020],{"class":954},[922,2459,2460],{},"你可以验证它成功输出了我们想要的结果。",[922,2462,2463,2464,2467],{},"类似地，我们再添加一个无参的构造函数重载——它构造出一个空字符串 ",[926,2465,2466],{},"\"\"","：",[931,2469,2471],{"className":933,"code":2470,"language":935,"meta":936,"style":936},"struct String {\n    String(unsigned num, char c); \u002F\u002F 同上，重载 #1\n    String(const char* initVal);  \u002F\u002F 同上，重载 #2\n    String() {                    \u002F\u002F 重载 #3\n        len = 0;                  \u002F\u002F 空字符串长度为 0\n        str = new char[1]{'\\0'};  \u002F\u002F 分配一个 '\\0' 就够了\n    }\n}\n",[926,2472,2473,2481,2502,2519,2530,2544,2574,2578],{"__ignoreMap":936},[940,2474,2475,2477,2479],{"class":942,"line":943},[940,2476,1969],{"class":946},[940,2478,1972],{"class":974},[940,2480,968],{"class":954},[940,2482,2483,2485,2487,2489,2491,2493,2495,2497,2499],{"class":942,"line":971},[940,2484,1979],{"class":950},[940,2486,955],{"class":954},[940,2488,2053],{"class":946},[940,2490,2138],{"class":961},[940,2492,1646],{"class":954},[940,2494,2027],{"class":946},[940,2496,1110],{"class":961},[940,2498,1796],{"class":954},[940,2500,2501],{"class":1327}," \u002F\u002F 同上，重载 #1\n",[940,2503,2504,2506,2508,2510,2512,2514,2516],{"class":942,"line":1017},[940,2505,1979],{"class":950},[940,2507,955],{"class":954},[940,2509,1163],{"class":946},[940,2511,1166],{"class":946},[940,2513,1988],{"class":961},[940,2515,1796],{"class":954},[940,2517,2518],{"class":1327},"  \u002F\u002F 同上，重载 #2\n",[940,2520,2521,2523,2525,2527],{"class":942,"line":1153},[940,2522,1979],{"class":950},[940,2524,1229],{"class":954},[940,2526,1657],{"class":954},[940,2528,2529],{"class":1327},"                    \u002F\u002F 重载 #3\n",[940,2531,2532,2534,2536,2539,2541],{"class":942,"line":1176},[940,2533,1998],{"class":1997},[940,2535,1782],{"class":954},[940,2537,2538],{"class":1241}," 0",[940,2540,2065],{"class":954},[940,2542,2543],{"class":1327},"                  \u002F\u002F 空字符串长度为 0\n",[940,2545,2546,2548,2550,2552,2554,2556,2559,2562,2564,2566,2568,2571],{"class":942,"line":1209},[940,2547,2019],{"class":1997},[940,2549,1782],{"class":954},[940,2551,2024],{"class":954},[940,2553,2027],{"class":946},[940,2555,2030],{"class":954},[940,2557,2558],{"class":1241},"1",[940,2560,2561],{"class":954},"]{",[940,2563,1267],{"class":954},[940,2565,2290],{"class":981},[940,2567,1267],{"class":954},[940,2569,2570],{"class":954},"};",[940,2572,2573],{"class":1327},"  \u002F\u002F 分配一个 '\\0' 就够了\n",[940,2575,2576],{"class":942,"line":1398},[940,2577,2109],{"class":954},[940,2579,2580],{"class":942,"line":1429},[940,2581,1020],{"class":954},[922,2583,2584],{},"随后，我们可以这样使用：",[931,2586,2588],{"className":933,"code":2587,"language":935,"meta":936,"style":936},"int main() {\n    String a(5, \"x\");  \u002F\u002F 调用重载 #1\n    String b(\"Hello\"); \u002F\u002F 调用重载 #2\n    String c;          \u002F\u002F 调用重载 #3\n\u002F\u002F  String c();        \u002F\u002F 不是 String 对象声明，见上节\n}\n",[926,2589,2590,2600,2622,2640,2650,2658],{"__ignoreMap":936},[940,2591,2592,2594,2596,2598],{"class":942,"line":943},[940,2593,958],{"class":946},[940,2595,1226],{"class":950},[940,2597,1229],{"class":954},[940,2599,968],{"class":954},[940,2601,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620],{"class":942,"line":971},[940,2603,2352],{"class":981},[940,2605,1789],{"class":950},[940,2607,955],{"class":954},[940,2609,2359],{"class":1241},[940,2611,1646],{"class":954},[940,2613,988],{"class":954},[940,2615,2366],{"class":991},[940,2617,995],{"class":954},[940,2619,1796],{"class":954},[940,2621,2373],{"class":1327},[940,2623,2624,2626,2628,2630,2632,2634,2636,2638],{"class":942,"line":1017},[940,2625,2352],{"class":981},[940,2627,2380],{"class":950},[940,2629,955],{"class":954},[940,2631,995],{"class":954},[940,2633,1286],{"class":991},[940,2635,995],{"class":954},[940,2637,1796],{"class":954},[940,2639,2393],{"class":1327},[940,2641,2642,2645,2647],{"class":942,"line":1153},[940,2643,2644],{"class":981},"    String c",[940,2646,2065],{"class":954},[940,2648,2649],{"class":1327},"          \u002F\u002F 调用重载 #3\n",[940,2651,2652,2655],{"class":942,"line":1176},[940,2653,2654],{"class":1327},"\u002F\u002F  String c();",[940,2656,2657],{"class":1327},"        \u002F\u002F 不是 String 对象声明，见上节\n",[940,2659,2660],{"class":942,"line":1209},[940,2661,1020],{"class":954},[922,2663,2664],{},"即：当没有初始化器的时候，就会选择无参的构造函数重载。",[2666,2667,2668],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":936,"searchDepth":943,"depth":971,"links":2670},[2671,2672],{"id":920,"depth":971,"text":443},{"id":1949,"depth":971,"text":1949},"我们先把面向对象的话题放在一边，来看一看 C++ 的重载（Overload）机制。","md",null,{},{"icon":416},{"title":443,"description":2673},"8PERopSPVm1WoSC31mSXHVqTcegFat6M01lAvyQDDBE",[2681,2683],{"title":439,"path":440,"stem":441,"description":2682,"icon":416,"children":-1},"在结束本章之前，我们还需要学一些很简单的小知识。",{"title":447,"path":448,"stem":449,"description":2684,"icon":416,"children":-1},"在讲解面向对象相关的知识前，我不得不补充一个非常重要且有用的概念——左值引用（lvalue reference），现阶段简称引用。",1784618098095]