[{"data":1,"prerenderedAt":5856},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai":5435,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai":5840,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai":5855},{"id":4,"title":5,"body":6,"canonicalPath":5417,"chapterDepth":65,"chapterOrder":5418,"date":5419,"description":57,"docI18nKey":5420,"docKey":5421,"docRoot":5422,"docTitle":5423,"extension":5424,"i18nKey":5425,"isBlogPost":5426,"isWikiDoc":157,"isWikiIndex":5426,"layout":5427,"legacyPath":5427,"locale":5428,"localeSlug":5429,"meta":5430,"navigation":157,"path":5417,"seo":5431,"sourcePath":5432,"sourceStem":5425,"stem":5433,"wikiDepth":65,"__hash__":5434},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态.md","polymorphism",{"type":7,"value":8,"toc":5411},"minimark",[9,12,17,24,27,37,40,48,51,525,530,538,541,544,552,555,560,563,567,570,573,579,819,822,828,1335,1337,1343,1375,1378,1389,1394,2381,2385,2391,2397,2401,2404,2411,2417,2420,2425,2433,2437,2679,2683,2689,2693,2698,2701,2704,2865,2872,2876,3492,3496,3502,3506,3509,3519,3522,3530,3533,3538,3541,3546,3549,3554,3559,3563,4054,4058,4064,4066,4078,4082,4086,4089,4092,4095,4098,4102,5398,5407],[10,11,5],"h3",{"id":5},[13,14,16],"h4",{"id":15},"the-basic-concept-of-polymorphism","The basic concept of polymorphism",[18,19,20],"p",{},[21,22,23],"strong",{},"Polymorphism is one of the three major features of C++ object-oriented programming",[18,25,26],{},"Polymorphism is divided into two categories.",[28,29,30,34],"ul",{},[31,32,33],"li",{},"Static polymorphism: Function overloading and operator overloading are forms of static polymorphism, reusing function names.",[31,35,36],{},"Dynamic polymorphism: implementing runtime polymorphism with derived classes and virtual functions",[18,38,39],{},"Difference between static polymorphism and dynamic polymorphism:",[28,41,42,45],{},[31,43,44],{},"Static polymorphism uses early binding - function addresses are determined during compilation.",[31,46,47],{},"Dynamic polymorphism's late binding of function addresses  -  Determining function address at runtime",[18,49,50],{},"Here is a case study to explain polymorphism.",[52,53,58],"pre",{"className":54,"code":55,"language":56,"meta":57,"style":57},"language-cpp shiki shiki-themes github-light github-dark","class Animal\n{\npublic:\n    \u002F\u002FSpeak函数就是虚函数\n    \u002F\u002F函数前面加上virtual关键字，变成虚函数，那么编译器在编译的时候就不能确定函数调用了。\n    virtual void speak()\n    {\n        cout \u003C\u003C \"动物在说话\" \u003C\u003C endl;\n    }\n};\n\nclass Cat :public Animal\n{\npublic:\n    void speak()\n    {\n        cout \u003C\u003C \"小猫在说话\" \u003C\u003C endl;\n    }\n};\n\nclass Dog :public Animal\n{\npublic:\n\n    void speak()\n    {\n        cout \u003C\u003C \"小狗在说话\" \u003C\u003C endl;\n    }\n\n};\n\u002F\u002F我们希望传入什么对象，那么就调用什么对象的函数\n\u002F\u002F如果函数地址在编译阶段就能确定，那么静态联编\n\u002F\u002F如果函数地址在运行阶段才能确定，就是动态联编\n\nvoid DoSpeak(Animal & animal)\n{\n    animal.speak();\n}\n\u002F\u002F\n\u002F\u002F多态满足条件： \n\u002F\u002F1、有继承关系\n\u002F\u002F2、子类重写父类中的虚函数\n\u002F\u002F多态使用：\n\u002F\u002F父类指针或引用指向子类对象\n\nvoid test01()\n{\n    Cat cat;\n    DoSpeak(cat);\n\n    Dog dog;\n    DoSpeak(dog);\n}\n\nint main() {\n\n    test01();\n\n\n    return 0;\n}\n","cpp","",[59,60,61,74,81,87,94,100,115,121,140,146,152,159,175,180,185,195,200,214,219,224,229,243,248,253,258,267,272,286,291,296,301,307,313,319,324,349,354,366,372,378,384,390,396,402,408,413,423,428,434,443,448,454,462,467,472,484,489,497,502,507,520],"code",{"__ignoreMap":57},[62,63,66,70],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"szBVR","class",[62,71,73],{"class":72},"sScJk"," Animal\n",[62,75,77],{"class":64,"line":76},2,[62,78,80],{"class":79},"sVt8B","{\n",[62,82,84],{"class":64,"line":83},3,[62,85,86],{"class":68},"public:\n",[62,88,90],{"class":64,"line":89},4,[62,91,93],{"class":92},"sJ8bj","    \u002F\u002FSpeak函数就是虚函数\n",[62,95,97],{"class":64,"line":96},5,[62,98,99],{"class":92},"    \u002F\u002F函数前面加上virtual关键字，变成虚函数，那么编译器在编译的时候就不能确定函数调用了。\n",[62,101,103,106,109,112],{"class":64,"line":102},6,[62,104,105],{"class":68},"    virtual",[62,107,108],{"class":68}," void",[62,110,111],{"class":72}," speak",[62,113,114],{"class":79},"()\n",[62,116,118],{"class":64,"line":117},7,[62,119,120],{"class":79},"    {\n",[62,122,124,127,130,134,137],{"class":64,"line":123},8,[62,125,126],{"class":79},"        cout ",[62,128,129],{"class":68},"\u003C\u003C",[62,131,133],{"class":132},"sZZnC"," \"动物在说话\"",[62,135,136],{"class":68}," \u003C\u003C",[62,138,139],{"class":79}," endl;\n",[62,141,143],{"class":64,"line":142},9,[62,144,145],{"class":79},"    }\n",[62,147,149],{"class":64,"line":148},10,[62,150,151],{"class":79},"};\n",[62,153,155],{"class":64,"line":154},11,[62,156,158],{"emptyLinePlaceholder":157},true,"\n",[62,160,162,164,167,170,173],{"class":64,"line":161},12,[62,163,69],{"class":68},[62,165,166],{"class":72}," Cat",[62,168,169],{"class":79}," :",[62,171,172],{"class":68},"public",[62,174,73],{"class":72},[62,176,178],{"class":64,"line":177},13,[62,179,80],{"class":79},[62,181,183],{"class":64,"line":182},14,[62,184,86],{"class":68},[62,186,188,191,193],{"class":64,"line":187},15,[62,189,190],{"class":68},"    void",[62,192,111],{"class":72},[62,194,114],{"class":79},[62,196,198],{"class":64,"line":197},16,[62,199,120],{"class":79},[62,201,203,205,207,210,212],{"class":64,"line":202},17,[62,204,126],{"class":79},[62,206,129],{"class":68},[62,208,209],{"class":132}," \"小猫在说话\"",[62,211,136],{"class":68},[62,213,139],{"class":79},[62,215,217],{"class":64,"line":216},18,[62,218,145],{"class":79},[62,220,222],{"class":64,"line":221},19,[62,223,151],{"class":79},[62,225,227],{"class":64,"line":226},20,[62,228,158],{"emptyLinePlaceholder":157},[62,230,232,234,237,239,241],{"class":64,"line":231},21,[62,233,69],{"class":68},[62,235,236],{"class":72}," Dog",[62,238,169],{"class":79},[62,240,172],{"class":68},[62,242,73],{"class":72},[62,244,246],{"class":64,"line":245},22,[62,247,80],{"class":79},[62,249,251],{"class":64,"line":250},23,[62,252,86],{"class":68},[62,254,256],{"class":64,"line":255},24,[62,257,158],{"emptyLinePlaceholder":157},[62,259,261,263,265],{"class":64,"line":260},25,[62,262,190],{"class":68},[62,264,111],{"class":72},[62,266,114],{"class":79},[62,268,270],{"class":64,"line":269},26,[62,271,120],{"class":79},[62,273,275,277,279,282,284],{"class":64,"line":274},27,[62,276,126],{"class":79},[62,278,129],{"class":68},[62,280,281],{"class":132}," \"小狗在说话\"",[62,283,136],{"class":68},[62,285,139],{"class":79},[62,287,289],{"class":64,"line":288},28,[62,290,145],{"class":79},[62,292,294],{"class":64,"line":293},29,[62,295,158],{"emptyLinePlaceholder":157},[62,297,299],{"class":64,"line":298},30,[62,300,151],{"class":79},[62,302,304],{"class":64,"line":303},31,[62,305,306],{"class":92},"\u002F\u002F我们希望传入什么对象，那么就调用什么对象的函数\n",[62,308,310],{"class":64,"line":309},32,[62,311,312],{"class":92},"\u002F\u002F如果函数地址在编译阶段就能确定，那么静态联编\n",[62,314,316],{"class":64,"line":315},33,[62,317,318],{"class":92},"\u002F\u002F如果函数地址在运行阶段才能确定，就是动态联编\n",[62,320,322],{"class":64,"line":321},34,[62,323,158],{"emptyLinePlaceholder":157},[62,325,327,330,333,336,339,342,346],{"class":64,"line":326},35,[62,328,329],{"class":68},"void",[62,331,332],{"class":72}," DoSpeak",[62,334,335],{"class":79},"(",[62,337,338],{"class":72},"Animal",[62,340,341],{"class":68}," &",[62,343,345],{"class":344},"s4XuR"," animal",[62,347,348],{"class":79},")\n",[62,350,352],{"class":64,"line":351},36,[62,353,80],{"class":79},[62,355,357,360,363],{"class":64,"line":356},37,[62,358,359],{"class":79},"    animal.",[62,361,362],{"class":72},"speak",[62,364,365],{"class":79},"();\n",[62,367,369],{"class":64,"line":368},38,[62,370,371],{"class":79},"}\n",[62,373,375],{"class":64,"line":374},39,[62,376,377],{"class":92},"\u002F\u002F\n",[62,379,381],{"class":64,"line":380},40,[62,382,383],{"class":92},"\u002F\u002F多态满足条件： \n",[62,385,387],{"class":64,"line":386},41,[62,388,389],{"class":92},"\u002F\u002F1、有继承关系\n",[62,391,393],{"class":64,"line":392},42,[62,394,395],{"class":92},"\u002F\u002F2、子类重写父类中的虚函数\n",[62,397,399],{"class":64,"line":398},43,[62,400,401],{"class":92},"\u002F\u002F多态使用：\n",[62,403,405],{"class":64,"line":404},44,[62,406,407],{"class":92},"\u002F\u002F父类指针或引用指向子类对象\n",[62,409,411],{"class":64,"line":410},45,[62,412,158],{"emptyLinePlaceholder":157},[62,414,416,418,421],{"class":64,"line":415},46,[62,417,329],{"class":68},[62,419,420],{"class":72}," test01",[62,422,114],{"class":79},[62,424,426],{"class":64,"line":425},47,[62,427,80],{"class":79},[62,429,431],{"class":64,"line":430},48,[62,432,433],{"class":79},"    Cat cat;\n",[62,435,437,440],{"class":64,"line":436},49,[62,438,439],{"class":72},"    DoSpeak",[62,441,442],{"class":79},"(cat);\n",[62,444,446],{"class":64,"line":445},50,[62,447,158],{"emptyLinePlaceholder":157},[62,449,451],{"class":64,"line":450},51,[62,452,453],{"class":79},"    Dog dog;\n",[62,455,457,459],{"class":64,"line":456},52,[62,458,439],{"class":72},[62,460,461],{"class":79},"(dog);\n",[62,463,465],{"class":64,"line":464},53,[62,466,371],{"class":79},[62,468,470],{"class":64,"line":469},54,[62,471,158],{"emptyLinePlaceholder":157},[62,473,475,478,481],{"class":64,"line":474},55,[62,476,477],{"class":68},"int",[62,479,480],{"class":72}," main",[62,482,483],{"class":79},"() {\n",[62,485,487],{"class":64,"line":486},56,[62,488,158],{"emptyLinePlaceholder":157},[62,490,492,495],{"class":64,"line":491},57,[62,493,494],{"class":72},"    test01",[62,496,365],{"class":79},[62,498,500],{"class":64,"line":499},58,[62,501,158],{"emptyLinePlaceholder":157},[62,503,505],{"class":64,"line":504},59,[62,506,158],{"emptyLinePlaceholder":157},[62,508,510,513,517],{"class":64,"line":509},60,[62,511,512],{"class":68},"    return",[62,514,516],{"class":515},"sj4cs"," 0",[62,518,519],{"class":79},";\n",[62,521,523],{"class":64,"line":522},61,[62,524,371],{"class":79},[18,526,527],{},[21,528,529],{},"运行结果：",[52,531,536],{"className":532,"code":534,"language":535,"meta":57},[533],"language-text","小猫在说话\n小狗在说话\n","text",[59,537,534],{"__ignoreMap":57},[18,539,540],{},"Summary:",[18,542,543],{},"Polymorphism satisfies conditions.",[28,545,546,549],{},[31,547,548],{},"has inheritance",[31,550,551],{},"Subclasses override virtual functions in parent classes.",[18,553,554],{},"Conditions for Using Polymorphism",[28,556,557],{},[31,558,559],{},"Base class pointer or reference pointing to a derived class object",[18,561,562],{},"Override means the return type, function name, and parameter list are completely identical.",[13,564,566],{"id":565},"polymorphism-example-one-calculator-class","Polymorphism Example One - Calculator Class",[18,568,569],{},"Case description:",[18,571,572],{},"Here are two implementations: one using conditional logic, the other using polymorphism.",[10,574,576],{"id":575},"approach-1-conditional-logic-regular-coding",[21,577,578],{},"Approach 1: Conditional Logic (Regular Coding)",[52,580,584],{"className":581,"code":582,"language":583,"meta":57,"style":57},"language-java shiki shiki-themes github-light github-dark","public class Calculator {\n    public double calculate(double num1, double num2, char operator) {\n        switch (operator) {\n            case '+':\n                return num1 + num2;\n            case '-':\n                return num1 - num2;\n            case '*':\n                return num1 * num2;\n            case '\u002F':\n                if (num2 != 0) {\n                    return num1 \u002F num2;\n                } else {\n                    throw new ArithmeticException(\"Cannot divide by zero\");\n                }\n            default:\n                throw new IllegalArgumentException(\"Invalid operator: \" + operator);\n        }\n    }\n}\n","java",[59,585,586,599,637,645,656,670,679,690,699,710,719,734,746,756,775,780,785,806,811,815],{"__ignoreMap":57},[62,587,588,590,593,596],{"class":64,"line":65},[62,589,172],{"class":68},[62,591,592],{"class":68}," class",[62,594,595],{"class":72}," Calculator",[62,597,598],{"class":79}," {\n",[62,600,601,604,607,610,612,615,618,621,623,626,628,631,634],{"class":64,"line":76},[62,602,603],{"class":68},"    public",[62,605,606],{"class":68}," double",[62,608,609],{"class":72}," calculate",[62,611,335],{"class":79},[62,613,614],{"class":68},"double",[62,616,617],{"class":344}," num1",[62,619,620],{"class":79},", ",[62,622,614],{"class":68},[62,624,625],{"class":344}," num2",[62,627,620],{"class":79},[62,629,630],{"class":68},"char",[62,632,633],{"class":344}," operator",[62,635,636],{"class":79},") {\n",[62,638,639,642],{"class":64,"line":83},[62,640,641],{"class":68},"        switch",[62,643,644],{"class":79}," (operator) {\n",[62,646,647,650,653],{"class":64,"line":89},[62,648,649],{"class":68},"            case",[62,651,652],{"class":132}," '+'",[62,654,655],{"class":68},":\n",[62,657,658,661,664,667],{"class":64,"line":96},[62,659,660],{"class":68},"                return",[62,662,663],{"class":79}," num1 ",[62,665,666],{"class":68},"+",[62,668,669],{"class":79}," num2;\n",[62,671,672,674,677],{"class":64,"line":102},[62,673,649],{"class":68},[62,675,676],{"class":132}," '-'",[62,678,655],{"class":68},[62,680,681,683,685,688],{"class":64,"line":117},[62,682,660],{"class":68},[62,684,663],{"class":79},[62,686,687],{"class":68},"-",[62,689,669],{"class":79},[62,691,692,694,697],{"class":64,"line":123},[62,693,649],{"class":68},[62,695,696],{"class":132}," '*'",[62,698,655],{"class":68},[62,700,701,703,705,708],{"class":64,"line":142},[62,702,660],{"class":68},[62,704,663],{"class":79},[62,706,707],{"class":68},"*",[62,709,669],{"class":79},[62,711,712,714,717],{"class":64,"line":148},[62,713,649],{"class":68},[62,715,716],{"class":132}," '\u002F'",[62,718,655],{"class":68},[62,720,721,724,727,730,732],{"class":64,"line":154},[62,722,723],{"class":68},"                if",[62,725,726],{"class":79}," (num2 ",[62,728,729],{"class":68},"!=",[62,731,516],{"class":515},[62,733,636],{"class":79},[62,735,736,739,741,744],{"class":64,"line":161},[62,737,738],{"class":68},"                    return",[62,740,663],{"class":79},[62,742,743],{"class":68},"\u002F",[62,745,669],{"class":79},[62,747,748,751,754],{"class":64,"line":177},[62,749,750],{"class":79},"                } ",[62,752,753],{"class":68},"else",[62,755,598],{"class":79},[62,757,758,761,764,767,769,772],{"class":64,"line":182},[62,759,760],{"class":68},"                    throw",[62,762,763],{"class":68}," new",[62,765,766],{"class":72}," ArithmeticException",[62,768,335],{"class":79},[62,770,771],{"class":132},"\"Cannot divide by zero\"",[62,773,774],{"class":79},");\n",[62,776,777],{"class":64,"line":187},[62,778,779],{"class":79},"                }\n",[62,781,782],{"class":64,"line":197},[62,783,784],{"class":68},"            default:\n",[62,786,787,790,792,795,797,800,803],{"class":64,"line":202},[62,788,789],{"class":68},"                throw",[62,791,763],{"class":68},[62,793,794],{"class":72}," IllegalArgumentException",[62,796,335],{"class":79},[62,798,799],{"class":132},"\"Invalid operator: \"",[62,801,802],{"class":68}," +",[62,804,805],{"class":79}," operator);\n",[62,807,808],{"class":64,"line":216},[62,809,810],{"class":79},"        }\n",[62,812,813],{"class":64,"line":221},[62,814,145],{"class":79},[62,816,817],{"class":64,"line":226},[62,818,371],{"class":79},[820,821],"hr",{},[10,823,825],{"id":824},"approach-2-polymorphism",[21,826,827],{},"Approach 2: Polymorphism",[52,829,831],{"className":581,"code":830,"language":583,"meta":57,"style":57},"\u002F\u002F Define an Operation interface\ninterface Operation {\n    double execute(double num1, double num2);\n}\n\n\u002F\u002F Implement concrete operations\nclass Addition implements Operation {\n    @Override\n    public double execute(double num1, double num2) {\n        return num1 + num2;\n    }\n}\n\nclass Subtraction implements Operation {\n    @Override\n    public double execute(double num1, double num2) {\n        return num1 - num2;\n    }\n}\n\nclass Multiplication implements Operation {\n    @Override\n    public double execute(double num1, double num2) {\n        return num1 * num2;\n    }\n}\n\nclass Division implements Operation {\n    @Override\n    public double execute(double num1, double num2) {\n        if (num2 != 0) {\n            return num1 \u002F num2;\n        } else {\n            throw new ArithmeticException(\"Cannot divide by zero\");\n        }\n    }\n}\n\n\u002F\u002F Calculator class using polymorphism\npublic class Calculator {\n    private Operation operation;\n\n    \u002F\u002F Set the operation dynamically\n    public void setOperation(Operation operation) {\n        this.operation = operation;\n    }\n\n    \u002F\u002F Perform the calculation\n    public double calculate(double num1, double num2) {\n        if (operation == null) {\n            throw new IllegalStateException(\"Operation not set\");\n        }\n        return operation.execute(num1, num2);\n    }\n}\n",[59,832,833,838,848,870,874,878,883,897,905,927,938,942,946,950,963,969,991,1001,1005,1009,1013,1026,1032,1054,1064,1068,1072,1076,1089,1095,1117,1130,1141,1150,1165,1169,1173,1177,1181,1186,1196,1204,1208,1213,1230,1244,1248,1252,1257,1279,1294,1310,1314,1327,1331],{"__ignoreMap":57},[62,834,835],{"class":64,"line":65},[62,836,837],{"class":92},"\u002F\u002F Define an Operation interface\n",[62,839,840,843,846],{"class":64,"line":76},[62,841,842],{"class":68},"interface",[62,844,845],{"class":72}," Operation",[62,847,598],{"class":79},[62,849,850,853,856,858,860,862,864,866,868],{"class":64,"line":83},[62,851,852],{"class":68},"    double",[62,854,855],{"class":72}," execute",[62,857,335],{"class":79},[62,859,614],{"class":68},[62,861,617],{"class":344},[62,863,620],{"class":79},[62,865,614],{"class":68},[62,867,625],{"class":344},[62,869,774],{"class":79},[62,871,872],{"class":64,"line":89},[62,873,371],{"class":79},[62,875,876],{"class":64,"line":96},[62,877,158],{"emptyLinePlaceholder":157},[62,879,880],{"class":64,"line":102},[62,881,882],{"class":92},"\u002F\u002F Implement concrete operations\n",[62,884,885,887,890,893,895],{"class":64,"line":117},[62,886,69],{"class":68},[62,888,889],{"class":72}," Addition",[62,891,892],{"class":68}," implements",[62,894,845],{"class":72},[62,896,598],{"class":79},[62,898,899,902],{"class":64,"line":123},[62,900,901],{"class":79},"    @",[62,903,904],{"class":68},"Override\n",[62,906,907,909,911,913,915,917,919,921,923,925],{"class":64,"line":142},[62,908,603],{"class":68},[62,910,606],{"class":68},[62,912,855],{"class":72},[62,914,335],{"class":79},[62,916,614],{"class":68},[62,918,617],{"class":344},[62,920,620],{"class":79},[62,922,614],{"class":68},[62,924,625],{"class":344},[62,926,636],{"class":79},[62,928,929,932,934,936],{"class":64,"line":148},[62,930,931],{"class":68},"        return",[62,933,663],{"class":79},[62,935,666],{"class":68},[62,937,669],{"class":79},[62,939,940],{"class":64,"line":154},[62,941,145],{"class":79},[62,943,944],{"class":64,"line":161},[62,945,371],{"class":79},[62,947,948],{"class":64,"line":177},[62,949,158],{"emptyLinePlaceholder":157},[62,951,952,954,957,959,961],{"class":64,"line":182},[62,953,69],{"class":68},[62,955,956],{"class":72}," Subtraction",[62,958,892],{"class":68},[62,960,845],{"class":72},[62,962,598],{"class":79},[62,964,965,967],{"class":64,"line":187},[62,966,901],{"class":79},[62,968,904],{"class":68},[62,970,971,973,975,977,979,981,983,985,987,989],{"class":64,"line":197},[62,972,603],{"class":68},[62,974,606],{"class":68},[62,976,855],{"class":72},[62,978,335],{"class":79},[62,980,614],{"class":68},[62,982,617],{"class":344},[62,984,620],{"class":79},[62,986,614],{"class":68},[62,988,625],{"class":344},[62,990,636],{"class":79},[62,992,993,995,997,999],{"class":64,"line":202},[62,994,931],{"class":68},[62,996,663],{"class":79},[62,998,687],{"class":68},[62,1000,669],{"class":79},[62,1002,1003],{"class":64,"line":216},[62,1004,145],{"class":79},[62,1006,1007],{"class":64,"line":221},[62,1008,371],{"class":79},[62,1010,1011],{"class":64,"line":226},[62,1012,158],{"emptyLinePlaceholder":157},[62,1014,1015,1017,1020,1022,1024],{"class":64,"line":231},[62,1016,69],{"class":68},[62,1018,1019],{"class":72}," Multiplication",[62,1021,892],{"class":68},[62,1023,845],{"class":72},[62,1025,598],{"class":79},[62,1027,1028,1030],{"class":64,"line":245},[62,1029,901],{"class":79},[62,1031,904],{"class":68},[62,1033,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052],{"class":64,"line":250},[62,1035,603],{"class":68},[62,1037,606],{"class":68},[62,1039,855],{"class":72},[62,1041,335],{"class":79},[62,1043,614],{"class":68},[62,1045,617],{"class":344},[62,1047,620],{"class":79},[62,1049,614],{"class":68},[62,1051,625],{"class":344},[62,1053,636],{"class":79},[62,1055,1056,1058,1060,1062],{"class":64,"line":255},[62,1057,931],{"class":68},[62,1059,663],{"class":79},[62,1061,707],{"class":68},[62,1063,669],{"class":79},[62,1065,1066],{"class":64,"line":260},[62,1067,145],{"class":79},[62,1069,1070],{"class":64,"line":269},[62,1071,371],{"class":79},[62,1073,1074],{"class":64,"line":274},[62,1075,158],{"emptyLinePlaceholder":157},[62,1077,1078,1080,1083,1085,1087],{"class":64,"line":288},[62,1079,69],{"class":68},[62,1081,1082],{"class":72}," Division",[62,1084,892],{"class":68},[62,1086,845],{"class":72},[62,1088,598],{"class":79},[62,1090,1091,1093],{"class":64,"line":293},[62,1092,901],{"class":79},[62,1094,904],{"class":68},[62,1096,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115],{"class":64,"line":298},[62,1098,603],{"class":68},[62,1100,606],{"class":68},[62,1102,855],{"class":72},[62,1104,335],{"class":79},[62,1106,614],{"class":68},[62,1108,617],{"class":344},[62,1110,620],{"class":79},[62,1112,614],{"class":68},[62,1114,625],{"class":344},[62,1116,636],{"class":79},[62,1118,1119,1122,1124,1126,1128],{"class":64,"line":303},[62,1120,1121],{"class":68},"        if",[62,1123,726],{"class":79},[62,1125,729],{"class":68},[62,1127,516],{"class":515},[62,1129,636],{"class":79},[62,1131,1132,1135,1137,1139],{"class":64,"line":309},[62,1133,1134],{"class":68},"            return",[62,1136,663],{"class":79},[62,1138,743],{"class":68},[62,1140,669],{"class":79},[62,1142,1143,1146,1148],{"class":64,"line":315},[62,1144,1145],{"class":79},"        } ",[62,1147,753],{"class":68},[62,1149,598],{"class":79},[62,1151,1152,1155,1157,1159,1161,1163],{"class":64,"line":321},[62,1153,1154],{"class":68},"            throw",[62,1156,763],{"class":68},[62,1158,766],{"class":72},[62,1160,335],{"class":79},[62,1162,771],{"class":132},[62,1164,774],{"class":79},[62,1166,1167],{"class":64,"line":326},[62,1168,810],{"class":79},[62,1170,1171],{"class":64,"line":351},[62,1172,145],{"class":79},[62,1174,1175],{"class":64,"line":356},[62,1176,371],{"class":79},[62,1178,1179],{"class":64,"line":368},[62,1180,158],{"emptyLinePlaceholder":157},[62,1182,1183],{"class":64,"line":374},[62,1184,1185],{"class":92},"\u002F\u002F Calculator class using polymorphism\n",[62,1187,1188,1190,1192,1194],{"class":64,"line":380},[62,1189,172],{"class":68},[62,1191,592],{"class":68},[62,1193,595],{"class":72},[62,1195,598],{"class":79},[62,1197,1198,1201],{"class":64,"line":386},[62,1199,1200],{"class":68},"    private",[62,1202,1203],{"class":79}," Operation operation;\n",[62,1205,1206],{"class":64,"line":392},[62,1207,158],{"emptyLinePlaceholder":157},[62,1209,1210],{"class":64,"line":398},[62,1211,1212],{"class":92},"    \u002F\u002F Set the operation dynamically\n",[62,1214,1215,1217,1219,1222,1225,1228],{"class":64,"line":404},[62,1216,603],{"class":68},[62,1218,108],{"class":68},[62,1220,1221],{"class":72}," setOperation",[62,1223,1224],{"class":79},"(Operation ",[62,1226,1227],{"class":344},"operation",[62,1229,636],{"class":79},[62,1231,1232,1235,1238,1241],{"class":64,"line":410},[62,1233,1234],{"class":515},"        this",[62,1236,1237],{"class":79},".operation ",[62,1239,1240],{"class":68},"=",[62,1242,1243],{"class":79}," operation;\n",[62,1245,1246],{"class":64,"line":415},[62,1247,145],{"class":79},[62,1249,1250],{"class":64,"line":425},[62,1251,158],{"emptyLinePlaceholder":157},[62,1253,1254],{"class":64,"line":430},[62,1255,1256],{"class":92},"    \u002F\u002F Perform the calculation\n",[62,1258,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277],{"class":64,"line":436},[62,1260,603],{"class":68},[62,1262,606],{"class":68},[62,1264,609],{"class":72},[62,1266,335],{"class":79},[62,1268,614],{"class":68},[62,1270,617],{"class":344},[62,1272,620],{"class":79},[62,1274,614],{"class":68},[62,1276,625],{"class":344},[62,1278,636],{"class":79},[62,1280,1281,1283,1286,1289,1292],{"class":64,"line":445},[62,1282,1121],{"class":68},[62,1284,1285],{"class":79}," (operation ",[62,1287,1288],{"class":68},"==",[62,1290,1291],{"class":515}," null",[62,1293,636],{"class":79},[62,1295,1296,1298,1300,1303,1305,1308],{"class":64,"line":450},[62,1297,1154],{"class":68},[62,1299,763],{"class":68},[62,1301,1302],{"class":72}," IllegalStateException",[62,1304,335],{"class":79},[62,1306,1307],{"class":132},"\"Operation not set\"",[62,1309,774],{"class":79},[62,1311,1312],{"class":64,"line":456},[62,1313,810],{"class":79},[62,1315,1316,1318,1321,1324],{"class":64,"line":464},[62,1317,931],{"class":68},[62,1319,1320],{"class":79}," operation.",[62,1322,1323],{"class":72},"execute",[62,1325,1326],{"class":79},"(num1, num2);\n",[62,1328,1329],{"class":64,"line":469},[62,1330,145],{"class":79},[62,1332,1333],{"class":64,"line":474},[62,1334,371],{"class":79},[820,1336],{},[10,1338,1340],{"id":1339},"key-differences",[21,1341,1342],{},"Key Differences",[28,1344,1345,1359],{},[31,1346,1347,1350,1351,1354,1355,1358],{},[21,1348,1349],{},"Conditional Logic",":",[1352,1353],"br",{},"\nUses ",[59,1356,1357],{},"switch\u002Fif-else"," to handle operations. Adding new operations requires modifying existing code.",[31,1360,1361,1350,1364,1366,1367,1370,1371,1374],{},[21,1362,1363],{},"Polymorphism",[1352,1365],{},"\nUses an interface (",[59,1368,1369],{},"Operation",") with separate classes for each operation. New operations can be added by implementing new classes, following the ",[21,1372,1373],{},"Open\u002FClosed Principle"," (open for extension, closed for modification).",[18,1376,1377],{},"The advantages of polymorphism:",[28,1379,1380,1383,1386],{},[31,1381,1382],{},"clear code organization structure",[31,1384,1385],{},"highly readable",[31,1387,1388],{},"facilitates early and late-stage expansion and maintenance",[18,1390,1391],{},[21,1392,1393],{},"Example:",[52,1395,1397],{"className":54,"code":1396,"language":56,"meta":57,"style":57},"\u002F\u002F普通实现\nclass Calculator {\npublic:\n    int getResult(string oper)\n    {\n        if (oper == \"+\") {\n            return m_Num1 + m_Num2;\n        }\n        else if (oper == \"-\") {\n            return m_Num1 - m_Num2;\n        }\n        else if (oper == \"*\") {\n            return m_Num1 * m_Num2;\n        }\n        \u002F\u002F如果要提供新的运算，需要修改源码\n    }\npublic:\n    int m_Num1;\n    int m_Num2;\n};\n\nvoid test01()\n{\n    \u002F\u002F普通实现测试\n    Calculator c;\n    c.m_Num1 = 10;\n    c.m_Num2 = 10;\n    cout \u003C\u003C c.m_Num1 \u003C\u003C \" + \" \u003C\u003C c.m_Num2 \u003C\u003C \" = \" \u003C\u003C c.getResult(\"+\") \u003C\u003C endl;\n\n    cout \u003C\u003C c.m_Num1 \u003C\u003C \" - \" \u003C\u003C c.m_Num2 \u003C\u003C \" = \" \u003C\u003C c.getResult(\"-\") \u003C\u003C endl;\n\n    cout \u003C\u003C c.m_Num1 \u003C\u003C \" * \" \u003C\u003C c.m_Num2 \u003C\u003C \" = \" \u003C\u003C c.getResult(\"*\") \u003C\u003C endl;\n}\n\n\u002F\u002F多态实现\n\u002F\u002F抽象计算器类\n\u002F\u002F多态优点：代码组织结构清晰，可读性强，利于前期和后期的扩展以及维护\nclass AbstractCalculator\n{\npublic :\n\n    virtual int getResult()\n    {\n        return 0;\n    }\n\n    int m_Num1;\n    int m_Num2;\n};\n\n\u002F\u002F加法计算器\nclass AddCalculator :public AbstractCalculator\n{\npublic:\n    int getResult()\n    {\n        return m_Num1 + m_Num2;\n    }\n};\n\n\u002F\u002F减法计算器\nclass SubCalculator :public AbstractCalculator\n{\npublic:\n    int getResult()\n    {\n        return m_Num1 - m_Num2;\n    }\n};\n\n\u002F\u002F乘法计算器\nclass MulCalculator :public AbstractCalculator\n{\npublic:\n    int getResult()\n    {\n        return m_Num1 * m_Num2;\n    }\n};\n\nvoid test02()\n{\n    \u002F\u002F创建加法计算器\n    AbstractCalculator *abc = new AddCalculator;\n    abc->m_Num1 = 10;\n    abc->m_Num2 = 10;\n    cout \u003C\u003C abc->m_Num1 \u003C\u003C \" + \" \u003C\u003C abc->m_Num2 \u003C\u003C \" = \" \u003C\u003C abc->getResult() \u003C\u003C endl;\n    delete abc;  \u002F\u002F用完了记得销毁\n\n    \u002F\u002F创建减法计算器\n    abc = new SubCalculator;\n    abc->m_Num1 = 10;\n    abc->m_Num2 = 10;\n    cout \u003C\u003C abc->m_Num1 \u003C\u003C \" - \" \u003C\u003C abc->m_Num2 \u003C\u003C \" = \" \u003C\u003C abc->getResult() \u003C\u003C endl;\n    delete abc;  \n\n    \u002F\u002F创建乘法计算器\n    abc = new MulCalculator;\n    abc->m_Num1 = 10;\n    abc->m_Num2 = 10;\n    cout \u003C\u003C abc->m_Num1 \u003C\u003C \" * \" \u003C\u003C abc->m_Num2 \u003C\u003C \" = \" \u003C\u003C abc->getResult() \u003C\u003C endl;\n    delete abc;\n}\n\nint main() {\n\n    \u002F\u002Ftest01();\n\n    test02();\n\n\n    return 0;\n}\n",[59,1398,1399,1404,1412,1416,1434,1438,1452,1464,1468,1485,1495,1499,1514,1524,1528,1533,1537,1541,1548,1554,1558,1562,1570,1574,1579,1584,1596,1607,1652,1656,1694,1698,1736,1740,1744,1749,1754,1759,1766,1770,1775,1779,1790,1794,1802,1806,1810,1816,1822,1826,1830,1835,1848,1852,1856,1864,1868,1878,1882,1886,1890,1895,1909,1914,1919,1928,1933,1944,1949,1954,1959,1965,1979,1984,1989,1998,2003,2014,2019,2024,2029,2039,2044,2050,2068,2080,2092,2129,2141,2146,2152,2165,2176,2187,2220,2228,2233,2239,2251,2262,2273,2306,2314,2319,2324,2333,2338,2344,2349,2357,2362,2367,2376],{"__ignoreMap":57},[62,1400,1401],{"class":64,"line":65},[62,1402,1403],{"class":92},"\u002F\u002F普通实现\n",[62,1405,1406,1408,1410],{"class":64,"line":76},[62,1407,69],{"class":68},[62,1409,595],{"class":72},[62,1411,598],{"class":79},[62,1413,1414],{"class":64,"line":83},[62,1415,86],{"class":68},[62,1417,1418,1421,1424,1426,1429,1432],{"class":64,"line":89},[62,1419,1420],{"class":68},"    int",[62,1422,1423],{"class":72}," getResult",[62,1425,335],{"class":79},[62,1427,1428],{"class":72},"string",[62,1430,1431],{"class":344}," oper",[62,1433,348],{"class":79},[62,1435,1436],{"class":64,"line":96},[62,1437,120],{"class":79},[62,1439,1440,1442,1445,1447,1450],{"class":64,"line":102},[62,1441,1121],{"class":68},[62,1443,1444],{"class":79}," (oper ",[62,1446,1288],{"class":68},[62,1448,1449],{"class":132}," \"+\"",[62,1451,636],{"class":79},[62,1453,1454,1456,1459,1461],{"class":64,"line":117},[62,1455,1134],{"class":68},[62,1457,1458],{"class":79}," m_Num1 ",[62,1460,666],{"class":68},[62,1462,1463],{"class":79}," m_Num2;\n",[62,1465,1466],{"class":64,"line":123},[62,1467,810],{"class":79},[62,1469,1470,1473,1476,1478,1480,1483],{"class":64,"line":142},[62,1471,1472],{"class":68},"        else",[62,1474,1475],{"class":68}," if",[62,1477,1444],{"class":79},[62,1479,1288],{"class":68},[62,1481,1482],{"class":132}," \"-\"",[62,1484,636],{"class":79},[62,1486,1487,1489,1491,1493],{"class":64,"line":148},[62,1488,1134],{"class":68},[62,1490,1458],{"class":79},[62,1492,687],{"class":68},[62,1494,1463],{"class":79},[62,1496,1497],{"class":64,"line":154},[62,1498,810],{"class":79},[62,1500,1501,1503,1505,1507,1509,1512],{"class":64,"line":161},[62,1502,1472],{"class":68},[62,1504,1475],{"class":68},[62,1506,1444],{"class":79},[62,1508,1288],{"class":68},[62,1510,1511],{"class":132}," \"*\"",[62,1513,636],{"class":79},[62,1515,1516,1518,1520,1522],{"class":64,"line":177},[62,1517,1134],{"class":68},[62,1519,1458],{"class":79},[62,1521,707],{"class":68},[62,1523,1463],{"class":79},[62,1525,1526],{"class":64,"line":182},[62,1527,810],{"class":79},[62,1529,1530],{"class":64,"line":187},[62,1531,1532],{"class":92},"        \u002F\u002F如果要提供新的运算，需要修改源码\n",[62,1534,1535],{"class":64,"line":197},[62,1536,145],{"class":79},[62,1538,1539],{"class":64,"line":202},[62,1540,86],{"class":68},[62,1542,1543,1545],{"class":64,"line":216},[62,1544,1420],{"class":68},[62,1546,1547],{"class":79}," m_Num1;\n",[62,1549,1550,1552],{"class":64,"line":221},[62,1551,1420],{"class":68},[62,1553,1463],{"class":79},[62,1555,1556],{"class":64,"line":226},[62,1557,151],{"class":79},[62,1559,1560],{"class":64,"line":231},[62,1561,158],{"emptyLinePlaceholder":157},[62,1563,1564,1566,1568],{"class":64,"line":245},[62,1565,329],{"class":68},[62,1567,420],{"class":72},[62,1569,114],{"class":79},[62,1571,1572],{"class":64,"line":250},[62,1573,80],{"class":79},[62,1575,1576],{"class":64,"line":255},[62,1577,1578],{"class":92},"    \u002F\u002F普通实现测试\n",[62,1580,1581],{"class":64,"line":260},[62,1582,1583],{"class":79},"    Calculator c;\n",[62,1585,1586,1589,1591,1594],{"class":64,"line":269},[62,1587,1588],{"class":79},"    c.m_Num1 ",[62,1590,1240],{"class":68},[62,1592,1593],{"class":515}," 10",[62,1595,519],{"class":79},[62,1597,1598,1601,1603,1605],{"class":64,"line":274},[62,1599,1600],{"class":79},"    c.m_Num2 ",[62,1602,1240],{"class":68},[62,1604,1593],{"class":515},[62,1606,519],{"class":79},[62,1608,1609,1612,1614,1617,1619,1622,1624,1627,1629,1632,1634,1637,1640,1642,1645,1648,1650],{"class":64,"line":288},[62,1610,1611],{"class":79},"    cout ",[62,1613,129],{"class":68},[62,1615,1616],{"class":79}," c.m_Num1 ",[62,1618,129],{"class":68},[62,1620,1621],{"class":132}," \" + \"",[62,1623,136],{"class":68},[62,1625,1626],{"class":79}," c.m_Num2 ",[62,1628,129],{"class":68},[62,1630,1631],{"class":132}," \" = \"",[62,1633,136],{"class":68},[62,1635,1636],{"class":79}," c.",[62,1638,1639],{"class":72},"getResult",[62,1641,335],{"class":79},[62,1643,1644],{"class":132},"\"+\"",[62,1646,1647],{"class":79},") ",[62,1649,129],{"class":68},[62,1651,139],{"class":79},[62,1653,1654],{"class":64,"line":293},[62,1655,158],{"emptyLinePlaceholder":157},[62,1657,1658,1660,1662,1664,1666,1669,1671,1673,1675,1677,1679,1681,1683,1685,1688,1690,1692],{"class":64,"line":298},[62,1659,1611],{"class":79},[62,1661,129],{"class":68},[62,1663,1616],{"class":79},[62,1665,129],{"class":68},[62,1667,1668],{"class":132}," \" - \"",[62,1670,136],{"class":68},[62,1672,1626],{"class":79},[62,1674,129],{"class":68},[62,1676,1631],{"class":132},[62,1678,136],{"class":68},[62,1680,1636],{"class":79},[62,1682,1639],{"class":72},[62,1684,335],{"class":79},[62,1686,1687],{"class":132},"\"-\"",[62,1689,1647],{"class":79},[62,1691,129],{"class":68},[62,1693,139],{"class":79},[62,1695,1696],{"class":64,"line":303},[62,1697,158],{"emptyLinePlaceholder":157},[62,1699,1700,1702,1704,1706,1708,1711,1713,1715,1717,1719,1721,1723,1725,1727,1730,1732,1734],{"class":64,"line":309},[62,1701,1611],{"class":79},[62,1703,129],{"class":68},[62,1705,1616],{"class":79},[62,1707,129],{"class":68},[62,1709,1710],{"class":132}," \" * \"",[62,1712,136],{"class":68},[62,1714,1626],{"class":79},[62,1716,129],{"class":68},[62,1718,1631],{"class":132},[62,1720,136],{"class":68},[62,1722,1636],{"class":79},[62,1724,1639],{"class":72},[62,1726,335],{"class":79},[62,1728,1729],{"class":132},"\"*\"",[62,1731,1647],{"class":79},[62,1733,129],{"class":68},[62,1735,139],{"class":79},[62,1737,1738],{"class":64,"line":315},[62,1739,371],{"class":79},[62,1741,1742],{"class":64,"line":321},[62,1743,158],{"emptyLinePlaceholder":157},[62,1745,1746],{"class":64,"line":326},[62,1747,1748],{"class":92},"\u002F\u002F多态实现\n",[62,1750,1751],{"class":64,"line":351},[62,1752,1753],{"class":92},"\u002F\u002F抽象计算器类\n",[62,1755,1756],{"class":64,"line":356},[62,1757,1758],{"class":92},"\u002F\u002F多态优点：代码组织结构清晰，可读性强，利于前期和后期的扩展以及维护\n",[62,1760,1761,1763],{"class":64,"line":368},[62,1762,69],{"class":68},[62,1764,1765],{"class":72}," AbstractCalculator\n",[62,1767,1768],{"class":64,"line":374},[62,1769,80],{"class":79},[62,1771,1772],{"class":64,"line":380},[62,1773,1774],{"class":68},"public :\n",[62,1776,1777],{"class":64,"line":386},[62,1778,158],{"emptyLinePlaceholder":157},[62,1780,1781,1783,1786,1788],{"class":64,"line":392},[62,1782,105],{"class":68},[62,1784,1785],{"class":68}," int",[62,1787,1423],{"class":72},[62,1789,114],{"class":79},[62,1791,1792],{"class":64,"line":398},[62,1793,120],{"class":79},[62,1795,1796,1798,1800],{"class":64,"line":404},[62,1797,931],{"class":68},[62,1799,516],{"class":515},[62,1801,519],{"class":79},[62,1803,1804],{"class":64,"line":410},[62,1805,145],{"class":79},[62,1807,1808],{"class":64,"line":415},[62,1809,158],{"emptyLinePlaceholder":157},[62,1811,1812,1814],{"class":64,"line":425},[62,1813,1420],{"class":68},[62,1815,1547],{"class":79},[62,1817,1818,1820],{"class":64,"line":430},[62,1819,1420],{"class":68},[62,1821,1463],{"class":79},[62,1823,1824],{"class":64,"line":436},[62,1825,151],{"class":79},[62,1827,1828],{"class":64,"line":445},[62,1829,158],{"emptyLinePlaceholder":157},[62,1831,1832],{"class":64,"line":450},[62,1833,1834],{"class":92},"\u002F\u002F加法计算器\n",[62,1836,1837,1839,1842,1844,1846],{"class":64,"line":456},[62,1838,69],{"class":68},[62,1840,1841],{"class":72}," AddCalculator",[62,1843,169],{"class":79},[62,1845,172],{"class":68},[62,1847,1765],{"class":72},[62,1849,1850],{"class":64,"line":464},[62,1851,80],{"class":79},[62,1853,1854],{"class":64,"line":469},[62,1855,86],{"class":68},[62,1857,1858,1860,1862],{"class":64,"line":474},[62,1859,1420],{"class":68},[62,1861,1423],{"class":72},[62,1863,114],{"class":79},[62,1865,1866],{"class":64,"line":486},[62,1867,120],{"class":79},[62,1869,1870,1872,1874,1876],{"class":64,"line":491},[62,1871,931],{"class":68},[62,1873,1458],{"class":79},[62,1875,666],{"class":68},[62,1877,1463],{"class":79},[62,1879,1880],{"class":64,"line":499},[62,1881,145],{"class":79},[62,1883,1884],{"class":64,"line":504},[62,1885,151],{"class":79},[62,1887,1888],{"class":64,"line":509},[62,1889,158],{"emptyLinePlaceholder":157},[62,1891,1892],{"class":64,"line":522},[62,1893,1894],{"class":92},"\u002F\u002F减法计算器\n",[62,1896,1898,1900,1903,1905,1907],{"class":64,"line":1897},62,[62,1899,69],{"class":68},[62,1901,1902],{"class":72}," SubCalculator",[62,1904,169],{"class":79},[62,1906,172],{"class":68},[62,1908,1765],{"class":72},[62,1910,1912],{"class":64,"line":1911},63,[62,1913,80],{"class":79},[62,1915,1917],{"class":64,"line":1916},64,[62,1918,86],{"class":68},[62,1920,1922,1924,1926],{"class":64,"line":1921},65,[62,1923,1420],{"class":68},[62,1925,1423],{"class":72},[62,1927,114],{"class":79},[62,1929,1931],{"class":64,"line":1930},66,[62,1932,120],{"class":79},[62,1934,1936,1938,1940,1942],{"class":64,"line":1935},67,[62,1937,931],{"class":68},[62,1939,1458],{"class":79},[62,1941,687],{"class":68},[62,1943,1463],{"class":79},[62,1945,1947],{"class":64,"line":1946},68,[62,1948,145],{"class":79},[62,1950,1952],{"class":64,"line":1951},69,[62,1953,151],{"class":79},[62,1955,1957],{"class":64,"line":1956},70,[62,1958,158],{"emptyLinePlaceholder":157},[62,1960,1962],{"class":64,"line":1961},71,[62,1963,1964],{"class":92},"\u002F\u002F乘法计算器\n",[62,1966,1968,1970,1973,1975,1977],{"class":64,"line":1967},72,[62,1969,69],{"class":68},[62,1971,1972],{"class":72}," MulCalculator",[62,1974,169],{"class":79},[62,1976,172],{"class":68},[62,1978,1765],{"class":72},[62,1980,1982],{"class":64,"line":1981},73,[62,1983,80],{"class":79},[62,1985,1987],{"class":64,"line":1986},74,[62,1988,86],{"class":68},[62,1990,1992,1994,1996],{"class":64,"line":1991},75,[62,1993,1420],{"class":68},[62,1995,1423],{"class":72},[62,1997,114],{"class":79},[62,1999,2001],{"class":64,"line":2000},76,[62,2002,120],{"class":79},[62,2004,2006,2008,2010,2012],{"class":64,"line":2005},77,[62,2007,931],{"class":68},[62,2009,1458],{"class":79},[62,2011,707],{"class":68},[62,2013,1463],{"class":79},[62,2015,2017],{"class":64,"line":2016},78,[62,2018,145],{"class":79},[62,2020,2022],{"class":64,"line":2021},79,[62,2023,151],{"class":79},[62,2025,2027],{"class":64,"line":2026},80,[62,2028,158],{"emptyLinePlaceholder":157},[62,2030,2032,2034,2037],{"class":64,"line":2031},81,[62,2033,329],{"class":68},[62,2035,2036],{"class":72}," test02",[62,2038,114],{"class":79},[62,2040,2042],{"class":64,"line":2041},82,[62,2043,80],{"class":79},[62,2045,2047],{"class":64,"line":2046},83,[62,2048,2049],{"class":92},"    \u002F\u002F创建加法计算器\n",[62,2051,2053,2056,2058,2061,2063,2065],{"class":64,"line":2052},84,[62,2054,2055],{"class":79},"    AbstractCalculator ",[62,2057,707],{"class":68},[62,2059,2060],{"class":79},"abc ",[62,2062,1240],{"class":68},[62,2064,763],{"class":68},[62,2066,2067],{"class":79}," AddCalculator;\n",[62,2069,2071,2074,2076,2078],{"class":64,"line":2070},85,[62,2072,2073],{"class":79},"    abc->m_Num1 ",[62,2075,1240],{"class":68},[62,2077,1593],{"class":515},[62,2079,519],{"class":79},[62,2081,2083,2086,2088,2090],{"class":64,"line":2082},86,[62,2084,2085],{"class":79},"    abc->m_Num2 ",[62,2087,1240],{"class":68},[62,2089,1593],{"class":515},[62,2091,519],{"class":79},[62,2093,2095,2097,2099,2102,2104,2106,2108,2111,2113,2115,2117,2120,2122,2125,2127],{"class":64,"line":2094},87,[62,2096,1611],{"class":79},[62,2098,129],{"class":68},[62,2100,2101],{"class":79}," abc->m_Num1 ",[62,2103,129],{"class":68},[62,2105,1621],{"class":132},[62,2107,136],{"class":68},[62,2109,2110],{"class":79}," abc->m_Num2 ",[62,2112,129],{"class":68},[62,2114,1631],{"class":132},[62,2116,136],{"class":68},[62,2118,2119],{"class":79}," abc->",[62,2121,1639],{"class":72},[62,2123,2124],{"class":79},"() ",[62,2126,129],{"class":68},[62,2128,139],{"class":79},[62,2130,2132,2135,2138],{"class":64,"line":2131},88,[62,2133,2134],{"class":68},"    delete",[62,2136,2137],{"class":79}," abc;",[62,2139,2140],{"class":92},"  \u002F\u002F用完了记得销毁\n",[62,2142,2144],{"class":64,"line":2143},89,[62,2145,158],{"emptyLinePlaceholder":157},[62,2147,2149],{"class":64,"line":2148},90,[62,2150,2151],{"class":92},"    \u002F\u002F创建减法计算器\n",[62,2153,2155,2158,2160,2162],{"class":64,"line":2154},91,[62,2156,2157],{"class":79},"    abc ",[62,2159,1240],{"class":68},[62,2161,763],{"class":68},[62,2163,2164],{"class":79}," SubCalculator;\n",[62,2166,2168,2170,2172,2174],{"class":64,"line":2167},92,[62,2169,2073],{"class":79},[62,2171,1240],{"class":68},[62,2173,1593],{"class":515},[62,2175,519],{"class":79},[62,2177,2179,2181,2183,2185],{"class":64,"line":2178},93,[62,2180,2085],{"class":79},[62,2182,1240],{"class":68},[62,2184,1593],{"class":515},[62,2186,519],{"class":79},[62,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218],{"class":64,"line":2189},94,[62,2191,1611],{"class":79},[62,2193,129],{"class":68},[62,2195,2101],{"class":79},[62,2197,129],{"class":68},[62,2199,1668],{"class":132},[62,2201,136],{"class":68},[62,2203,2110],{"class":79},[62,2205,129],{"class":68},[62,2207,1631],{"class":132},[62,2209,136],{"class":68},[62,2211,2119],{"class":79},[62,2213,1639],{"class":72},[62,2215,2124],{"class":79},[62,2217,129],{"class":68},[62,2219,139],{"class":79},[62,2221,2223,2225],{"class":64,"line":2222},95,[62,2224,2134],{"class":68},[62,2226,2227],{"class":79}," abc;  \n",[62,2229,2231],{"class":64,"line":2230},96,[62,2232,158],{"emptyLinePlaceholder":157},[62,2234,2236],{"class":64,"line":2235},97,[62,2237,2238],{"class":92},"    \u002F\u002F创建乘法计算器\n",[62,2240,2242,2244,2246,2248],{"class":64,"line":2241},98,[62,2243,2157],{"class":79},[62,2245,1240],{"class":68},[62,2247,763],{"class":68},[62,2249,2250],{"class":79}," MulCalculator;\n",[62,2252,2254,2256,2258,2260],{"class":64,"line":2253},99,[62,2255,2073],{"class":79},[62,2257,1240],{"class":68},[62,2259,1593],{"class":515},[62,2261,519],{"class":79},[62,2263,2265,2267,2269,2271],{"class":64,"line":2264},100,[62,2266,2085],{"class":79},[62,2268,1240],{"class":68},[62,2270,1593],{"class":515},[62,2272,519],{"class":79},[62,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304],{"class":64,"line":2275},101,[62,2277,1611],{"class":79},[62,2279,129],{"class":68},[62,2281,2101],{"class":79},[62,2283,129],{"class":68},[62,2285,1710],{"class":132},[62,2287,136],{"class":68},[62,2289,2110],{"class":79},[62,2291,129],{"class":68},[62,2293,1631],{"class":132},[62,2295,136],{"class":68},[62,2297,2119],{"class":79},[62,2299,1639],{"class":72},[62,2301,2124],{"class":79},[62,2303,129],{"class":68},[62,2305,139],{"class":79},[62,2307,2309,2311],{"class":64,"line":2308},102,[62,2310,2134],{"class":68},[62,2312,2313],{"class":79}," abc;\n",[62,2315,2317],{"class":64,"line":2316},103,[62,2318,371],{"class":79},[62,2320,2322],{"class":64,"line":2321},104,[62,2323,158],{"emptyLinePlaceholder":157},[62,2325,2327,2329,2331],{"class":64,"line":2326},105,[62,2328,477],{"class":68},[62,2330,480],{"class":72},[62,2332,483],{"class":79},[62,2334,2336],{"class":64,"line":2335},106,[62,2337,158],{"emptyLinePlaceholder":157},[62,2339,2341],{"class":64,"line":2340},107,[62,2342,2343],{"class":92},"    \u002F\u002Ftest01();\n",[62,2345,2347],{"class":64,"line":2346},108,[62,2348,158],{"emptyLinePlaceholder":157},[62,2350,2352,2355],{"class":64,"line":2351},109,[62,2353,2354],{"class":72},"    test02",[62,2356,365],{"class":79},[62,2358,2360],{"class":64,"line":2359},110,[62,2361,158],{"emptyLinePlaceholder":157},[62,2363,2365],{"class":64,"line":2364},111,[62,2366,158],{"emptyLinePlaceholder":157},[62,2368,2370,2372,2374],{"class":64,"line":2369},112,[62,2371,512],{"class":68},[62,2373,516],{"class":515},[62,2375,519],{"class":79},[62,2377,2379],{"class":64,"line":2378},113,[62,2380,371],{"class":79},[18,2382,2383],{},[21,2384,529],{},[52,2386,2389],{"className":2387,"code":2388,"language":535,"meta":57},[533],"10 + 10 = 20\n10 - 10 = 0\n10 * 10 = 100\n",[59,2390,2388],{"__ignoreMap":57},[2392,2393,2394],"blockquote",{},[18,2395,2396],{},"Summary: C++ development encourages leveraging polymorphism to design program architectures, as it offers numerous advantages.",[13,2398,2400],{"id":2399},"pure-virtual-functions-and-abstract-classes","Pure virtual functions and abstract classes",[18,2402,2403],{},"In polymorphism, the implementation of a virtual function in a parent class is often meaningless, as it primarily serves to call the overridden version in the subclass.",[18,2405,2406,2407,2410],{},"Therefore, the virtual function can be changed to a ",[21,2408,2409],{},"pure virtual function",".",[18,2412,2413,2414],{},"Pure virtual function syntax: ",[59,2415,2416],{},"virtual 返回值类型 函数名 （参数列表）= 0 ;",[18,2418,2419],{},"When a class has a pure virtual function, it is also called an ==abstract class==.",[18,2421,2422],{},[21,2423,2424],{},"Abstract class characteristics",[28,2426,2427,2430],{},[31,2428,2429],{},"Cannot instantiate object",[31,2431,2432],{},"Derived classes must override the pure virtual functions in abstract classes; otherwise, they remain abstract classes.",[18,2434,2435],{},[21,2436,1393],{},[52,2438,2440],{"className":54,"code":2439,"language":56,"meta":57,"style":57},"class Base\n{\npublic:\n    \u002F\u002F纯虚函数\n    \u002F\u002F类中只要有一个纯虚函数就称为抽象类\n    \u002F\u002F抽象类无法实例化对象\n    \u002F\u002F子类必须重写父类中的纯虚函数，否则也属于抽象类\n    virtual void func() = 0;\n};\n\nclass Son :public Base\n{\npublic:\n    virtual void func() \n    {\n        cout \u003C\u003C \"func调用\" \u003C\u003C endl;\n    };\n};\n\nvoid test01()\n{\n    Base * base = NULL;\n    \u002F\u002Fbase = new Base; \u002F\u002F 错误，抽象类无法实例化对象\n    base = new Son;\n    base->func();\n    delete base;\u002F\u002F记得销毁\n}\n\nint main() {\n\n    test01();\n\n\n    return 0;\n}\n",[59,2441,2442,2449,2453,2457,2462,2467,2472,2477,2494,2498,2502,2515,2519,2523,2534,2538,2551,2556,2560,2564,2572,2576,2593,2601,2613,2623,2633,2637,2641,2649,2653,2659,2663,2667,2675],{"__ignoreMap":57},[62,2443,2444,2446],{"class":64,"line":65},[62,2445,69],{"class":68},[62,2447,2448],{"class":72}," Base\n",[62,2450,2451],{"class":64,"line":76},[62,2452,80],{"class":79},[62,2454,2455],{"class":64,"line":83},[62,2456,86],{"class":68},[62,2458,2459],{"class":64,"line":89},[62,2460,2461],{"class":92},"    \u002F\u002F纯虚函数\n",[62,2463,2464],{"class":64,"line":96},[62,2465,2466],{"class":92},"    \u002F\u002F类中只要有一个纯虚函数就称为抽象类\n",[62,2468,2469],{"class":64,"line":102},[62,2470,2471],{"class":92},"    \u002F\u002F抽象类无法实例化对象\n",[62,2473,2474],{"class":64,"line":117},[62,2475,2476],{"class":92},"    \u002F\u002F子类必须重写父类中的纯虚函数，否则也属于抽象类\n",[62,2478,2479,2481,2483,2486,2488,2490,2492],{"class":64,"line":123},[62,2480,105],{"class":68},[62,2482,108],{"class":68},[62,2484,2485],{"class":72}," func",[62,2487,2124],{"class":79},[62,2489,1240],{"class":68},[62,2491,516],{"class":515},[62,2493,519],{"class":79},[62,2495,2496],{"class":64,"line":142},[62,2497,151],{"class":79},[62,2499,2500],{"class":64,"line":148},[62,2501,158],{"emptyLinePlaceholder":157},[62,2503,2504,2506,2509,2511,2513],{"class":64,"line":154},[62,2505,69],{"class":68},[62,2507,2508],{"class":72}," Son",[62,2510,169],{"class":79},[62,2512,172],{"class":68},[62,2514,2448],{"class":72},[62,2516,2517],{"class":64,"line":161},[62,2518,80],{"class":79},[62,2520,2521],{"class":64,"line":177},[62,2522,86],{"class":68},[62,2524,2525,2527,2529,2531],{"class":64,"line":182},[62,2526,105],{"class":68},[62,2528,108],{"class":68},[62,2530,2485],{"class":72},[62,2532,2533],{"class":79},"() \n",[62,2535,2536],{"class":64,"line":187},[62,2537,120],{"class":79},[62,2539,2540,2542,2544,2547,2549],{"class":64,"line":197},[62,2541,126],{"class":79},[62,2543,129],{"class":68},[62,2545,2546],{"class":132}," \"func调用\"",[62,2548,136],{"class":68},[62,2550,139],{"class":79},[62,2552,2553],{"class":64,"line":202},[62,2554,2555],{"class":79},"    };\n",[62,2557,2558],{"class":64,"line":216},[62,2559,151],{"class":79},[62,2561,2562],{"class":64,"line":221},[62,2563,158],{"emptyLinePlaceholder":157},[62,2565,2566,2568,2570],{"class":64,"line":226},[62,2567,329],{"class":68},[62,2569,420],{"class":72},[62,2571,114],{"class":79},[62,2573,2574],{"class":64,"line":231},[62,2575,80],{"class":79},[62,2577,2578,2581,2583,2586,2588,2591],{"class":64,"line":245},[62,2579,2580],{"class":79},"    Base ",[62,2582,707],{"class":68},[62,2584,2585],{"class":79}," base ",[62,2587,1240],{"class":68},[62,2589,2590],{"class":515}," NULL",[62,2592,519],{"class":79},[62,2594,2595,2598],{"class":64,"line":250},[62,2596,2597],{"class":92},"    \u002F\u002Fbase = new Base;",[62,2599,2600],{"class":92}," \u002F\u002F 错误，抽象类无法实例化对象\n",[62,2602,2603,2606,2608,2610],{"class":64,"line":255},[62,2604,2605],{"class":79},"    base ",[62,2607,1240],{"class":68},[62,2609,763],{"class":68},[62,2611,2612],{"class":79}," Son;\n",[62,2614,2615,2618,2621],{"class":64,"line":260},[62,2616,2617],{"class":79},"    base->",[62,2619,2620],{"class":72},"func",[62,2622,365],{"class":79},[62,2624,2625,2627,2630],{"class":64,"line":269},[62,2626,2134],{"class":68},[62,2628,2629],{"class":79}," base;",[62,2631,2632],{"class":92},"\u002F\u002F记得销毁\n",[62,2634,2635],{"class":64,"line":274},[62,2636,371],{"class":79},[62,2638,2639],{"class":64,"line":288},[62,2640,158],{"emptyLinePlaceholder":157},[62,2642,2643,2645,2647],{"class":64,"line":293},[62,2644,477],{"class":68},[62,2646,480],{"class":72},[62,2648,483],{"class":79},[62,2650,2651],{"class":64,"line":298},[62,2652,158],{"emptyLinePlaceholder":157},[62,2654,2655,2657],{"class":64,"line":303},[62,2656,494],{"class":72},[62,2658,365],{"class":79},[62,2660,2661],{"class":64,"line":309},[62,2662,158],{"emptyLinePlaceholder":157},[62,2664,2665],{"class":64,"line":315},[62,2666,158],{"emptyLinePlaceholder":157},[62,2668,2669,2671,2673],{"class":64,"line":321},[62,2670,512],{"class":68},[62,2672,516],{"class":515},[62,2674,519],{"class":79},[62,2676,2677],{"class":64,"line":326},[62,2678,371],{"class":79},[18,2680,2681],{},[21,2682,529],{},[52,2684,2687],{"className":2685,"code":2686,"language":535,"meta":57},[533],"func调用\n",[59,2688,2686],{"__ignoreMap":57},[13,2690,2692],{"id":2691},"polymorphism-case-two-preparing-beverages","Polymorphism Case Two - Preparing Beverages",[18,2694,2695],{},[21,2696,2697],{},"Case Description:",[18,2699,2700],{},"The general process for making drinks is: boil water - brew - pour into a cup - add ingredients.",[18,2702,2703],{},"Implement this case study using polymorphism by providing an abstract base class for making beverages, with subclasses for preparing coffee and tea.",[52,2705,2707],{"className":581,"code":2706,"language":583,"meta":57,"style":57},"\u002F\u002F Abstract base class for beverage preparation\nabstract class Beverage {\n    public abstract void prepare();\n}\n\n\u002F\u002F Subclass for coffee\nclass Coffee extends Beverage {\n    @Override\n    public void prepare() {\n        System.out.println(\"Preparing coffee...\");\n    }\n}\n\n\u002F\u002F Subclass for tea\nclass Tea extends Beverage {\n    @Override\n    public void prepare() {\n        System.out.println(\"Preparing tea...\");\n    }\n}\n",[59,2708,2709,2714,2726,2740,2744,2748,2753,2767,2773,2783,2798,2802,2806,2810,2815,2828,2834,2844,2857,2861],{"__ignoreMap":57},[62,2710,2711],{"class":64,"line":65},[62,2712,2713],{"class":92},"\u002F\u002F Abstract base class for beverage preparation\n",[62,2715,2716,2719,2721,2724],{"class":64,"line":76},[62,2717,2718],{"class":68},"abstract",[62,2720,592],{"class":68},[62,2722,2723],{"class":72}," Beverage",[62,2725,598],{"class":79},[62,2727,2728,2730,2733,2735,2738],{"class":64,"line":83},[62,2729,603],{"class":68},[62,2731,2732],{"class":68}," abstract",[62,2734,108],{"class":68},[62,2736,2737],{"class":72}," prepare",[62,2739,365],{"class":79},[62,2741,2742],{"class":64,"line":89},[62,2743,371],{"class":79},[62,2745,2746],{"class":64,"line":96},[62,2747,158],{"emptyLinePlaceholder":157},[62,2749,2750],{"class":64,"line":102},[62,2751,2752],{"class":92},"\u002F\u002F Subclass for coffee\n",[62,2754,2755,2757,2760,2763,2765],{"class":64,"line":117},[62,2756,69],{"class":68},[62,2758,2759],{"class":72}," Coffee",[62,2761,2762],{"class":68}," extends",[62,2764,2723],{"class":72},[62,2766,598],{"class":79},[62,2768,2769,2771],{"class":64,"line":123},[62,2770,901],{"class":79},[62,2772,904],{"class":68},[62,2774,2775,2777,2779,2781],{"class":64,"line":142},[62,2776,603],{"class":68},[62,2778,108],{"class":68},[62,2780,2737],{"class":72},[62,2782,483],{"class":79},[62,2784,2785,2788,2791,2793,2796],{"class":64,"line":148},[62,2786,2787],{"class":79},"        System.out.",[62,2789,2790],{"class":72},"println",[62,2792,335],{"class":79},[62,2794,2795],{"class":132},"\"Preparing coffee...\"",[62,2797,774],{"class":79},[62,2799,2800],{"class":64,"line":154},[62,2801,145],{"class":79},[62,2803,2804],{"class":64,"line":161},[62,2805,371],{"class":79},[62,2807,2808],{"class":64,"line":177},[62,2809,158],{"emptyLinePlaceholder":157},[62,2811,2812],{"class":64,"line":182},[62,2813,2814],{"class":92},"\u002F\u002F Subclass for tea\n",[62,2816,2817,2819,2822,2824,2826],{"class":64,"line":187},[62,2818,69],{"class":68},[62,2820,2821],{"class":72}," Tea",[62,2823,2762],{"class":68},[62,2825,2723],{"class":72},[62,2827,598],{"class":79},[62,2829,2830,2832],{"class":64,"line":197},[62,2831,901],{"class":79},[62,2833,904],{"class":68},[62,2835,2836,2838,2840,2842],{"class":64,"line":202},[62,2837,603],{"class":68},[62,2839,108],{"class":68},[62,2841,2737],{"class":72},[62,2843,483],{"class":79},[62,2845,2846,2848,2850,2852,2855],{"class":64,"line":216},[62,2847,2787],{"class":79},[62,2849,2790],{"class":72},[62,2851,335],{"class":79},[62,2853,2854],{"class":132},"\"Preparing tea...\"",[62,2856,774],{"class":79},[62,2858,2859],{"class":64,"line":221},[62,2860,145],{"class":79},[62,2862,2863],{"class":64,"line":226},[62,2864,371],{"class":79},[18,2866,2867],{},[2868,2869],"img",{"alt":2870,"src":2871},"1545985945198","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F10\u002F05\u002Fstage3-1545985945198-f6ce42c7a5.webp",[18,2873,2874],{},[21,2875,1393],{},[52,2877,2879],{"className":54,"code":2878,"language":56,"meta":57,"style":57},"\u002F\u002F抽象制作饮品\nclass AbstractDrinking {\npublic:\n    \u002F\u002F烧水\n    virtual void Boil() = 0;\n    \u002F\u002F冲泡\n    virtual void Brew() = 0;\n    \u002F\u002F倒入杯中\n    virtual void PourInCup() = 0;\n    \u002F\u002F加入辅料\n    virtual void PutSomething() = 0;\n    \u002F\u002F规定流程\n    void MakeDrink() {\n        Boil();\n        Brew();\n        PourInCup();\n        PutSomething();\n    }\n};\n\n\u002F\u002F制作咖啡\nclass Coffee : public AbstractDrinking {\npublic:\n    \u002F\u002F烧水\n    virtual void Boil() {\n        cout \u003C\u003C \"煮农夫山泉!\" \u003C\u003C endl;\n    }\n    \u002F\u002F冲泡\n    virtual void Brew() {\n        cout \u003C\u003C \"冲泡咖啡!\" \u003C\u003C endl;\n    }\n    \u002F\u002F倒入杯中\n    virtual void PourInCup() {\n        cout \u003C\u003C \"将咖啡倒入杯中!\" \u003C\u003C endl;\n    }\n    \u002F\u002F加入辅料\n    virtual void PutSomething() {\n        cout \u003C\u003C \"加入牛奶!\" \u003C\u003C endl;\n    }\n};\n\n\u002F\u002F制作茶水\nclass Tea : public AbstractDrinking {\npublic:\n    \u002F\u002F烧水\n    virtual void Boil() {\n        cout \u003C\u003C \"煮自来水!\" \u003C\u003C endl;\n    }\n    \u002F\u002F冲泡\n    virtual void Brew() {\n        cout \u003C\u003C \"冲泡茶叶!\" \u003C\u003C endl;\n    }\n    \u002F\u002F倒入杯中\n    virtual void PourInCup() {\n        cout \u003C\u003C \"将茶水倒入杯中!\" \u003C\u003C endl;\n    }\n    \u002F\u002F加入辅料\n    virtual void PutSomething() {\n        cout \u003C\u003C \"加入枸杞!\" \u003C\u003C endl;\n    }\n};\n\n\u002F\u002F业务函数\nvoid DoWork(AbstractDrinking* drink) {\n    drink->MakeDrink();\n    delete drink;\n}\n\nvoid test01() {\n    DoWork(new Coffee);\n    cout \u003C\u003C \"--------------\" \u003C\u003C endl;\n    DoWork(new Tea);\n}\n\nint main() {\n\n    test01();\n\n\n    return 0;\n}\n",[59,2880,2881,2886,2895,2899,2904,2921,2926,2943,2948,2965,2970,2987,2992,3001,3008,3015,3022,3029,3033,3037,3041,3046,3061,3065,3069,3079,3092,3096,3100,3110,3123,3127,3131,3141,3154,3158,3162,3172,3185,3189,3193,3197,3202,3216,3220,3224,3234,3247,3251,3255,3265,3278,3282,3286,3296,3309,3313,3317,3327,3340,3344,3348,3352,3357,3376,3386,3393,3397,3401,3409,3422,3435,3446,3450,3454,3462,3466,3472,3476,3480,3488],{"__ignoreMap":57},[62,2882,2883],{"class":64,"line":65},[62,2884,2885],{"class":92},"\u002F\u002F抽象制作饮品\n",[62,2887,2888,2890,2893],{"class":64,"line":76},[62,2889,69],{"class":68},[62,2891,2892],{"class":72}," AbstractDrinking",[62,2894,598],{"class":79},[62,2896,2897],{"class":64,"line":83},[62,2898,86],{"class":68},[62,2900,2901],{"class":64,"line":89},[62,2902,2903],{"class":92},"    \u002F\u002F烧水\n",[62,2905,2906,2908,2910,2913,2915,2917,2919],{"class":64,"line":96},[62,2907,105],{"class":68},[62,2909,108],{"class":68},[62,2911,2912],{"class":72}," Boil",[62,2914,2124],{"class":79},[62,2916,1240],{"class":68},[62,2918,516],{"class":515},[62,2920,519],{"class":79},[62,2922,2923],{"class":64,"line":102},[62,2924,2925],{"class":92},"    \u002F\u002F冲泡\n",[62,2927,2928,2930,2932,2935,2937,2939,2941],{"class":64,"line":117},[62,2929,105],{"class":68},[62,2931,108],{"class":68},[62,2933,2934],{"class":72}," Brew",[62,2936,2124],{"class":79},[62,2938,1240],{"class":68},[62,2940,516],{"class":515},[62,2942,519],{"class":79},[62,2944,2945],{"class":64,"line":123},[62,2946,2947],{"class":92},"    \u002F\u002F倒入杯中\n",[62,2949,2950,2952,2954,2957,2959,2961,2963],{"class":64,"line":142},[62,2951,105],{"class":68},[62,2953,108],{"class":68},[62,2955,2956],{"class":72}," PourInCup",[62,2958,2124],{"class":79},[62,2960,1240],{"class":68},[62,2962,516],{"class":515},[62,2964,519],{"class":79},[62,2966,2967],{"class":64,"line":148},[62,2968,2969],{"class":92},"    \u002F\u002F加入辅料\n",[62,2971,2972,2974,2976,2979,2981,2983,2985],{"class":64,"line":154},[62,2973,105],{"class":68},[62,2975,108],{"class":68},[62,2977,2978],{"class":72}," PutSomething",[62,2980,2124],{"class":79},[62,2982,1240],{"class":68},[62,2984,516],{"class":515},[62,2986,519],{"class":79},[62,2988,2989],{"class":64,"line":161},[62,2990,2991],{"class":92},"    \u002F\u002F规定流程\n",[62,2993,2994,2996,2999],{"class":64,"line":177},[62,2995,190],{"class":68},[62,2997,2998],{"class":72}," MakeDrink",[62,3000,483],{"class":79},[62,3002,3003,3006],{"class":64,"line":182},[62,3004,3005],{"class":72},"        Boil",[62,3007,365],{"class":79},[62,3009,3010,3013],{"class":64,"line":187},[62,3011,3012],{"class":72},"        Brew",[62,3014,365],{"class":79},[62,3016,3017,3020],{"class":64,"line":197},[62,3018,3019],{"class":72},"        PourInCup",[62,3021,365],{"class":79},[62,3023,3024,3027],{"class":64,"line":202},[62,3025,3026],{"class":72},"        PutSomething",[62,3028,365],{"class":79},[62,3030,3031],{"class":64,"line":216},[62,3032,145],{"class":79},[62,3034,3035],{"class":64,"line":221},[62,3036,151],{"class":79},[62,3038,3039],{"class":64,"line":226},[62,3040,158],{"emptyLinePlaceholder":157},[62,3042,3043],{"class":64,"line":231},[62,3044,3045],{"class":92},"\u002F\u002F制作咖啡\n",[62,3047,3048,3050,3052,3055,3057,3059],{"class":64,"line":245},[62,3049,69],{"class":68},[62,3051,2759],{"class":72},[62,3053,3054],{"class":79}," : ",[62,3056,172],{"class":68},[62,3058,2892],{"class":72},[62,3060,598],{"class":79},[62,3062,3063],{"class":64,"line":250},[62,3064,86],{"class":68},[62,3066,3067],{"class":64,"line":255},[62,3068,2903],{"class":92},[62,3070,3071,3073,3075,3077],{"class":64,"line":260},[62,3072,105],{"class":68},[62,3074,108],{"class":68},[62,3076,2912],{"class":72},[62,3078,483],{"class":79},[62,3080,3081,3083,3085,3088,3090],{"class":64,"line":269},[62,3082,126],{"class":79},[62,3084,129],{"class":68},[62,3086,3087],{"class":132}," \"煮农夫山泉!\"",[62,3089,136],{"class":68},[62,3091,139],{"class":79},[62,3093,3094],{"class":64,"line":274},[62,3095,145],{"class":79},[62,3097,3098],{"class":64,"line":288},[62,3099,2925],{"class":92},[62,3101,3102,3104,3106,3108],{"class":64,"line":293},[62,3103,105],{"class":68},[62,3105,108],{"class":68},[62,3107,2934],{"class":72},[62,3109,483],{"class":79},[62,3111,3112,3114,3116,3119,3121],{"class":64,"line":298},[62,3113,126],{"class":79},[62,3115,129],{"class":68},[62,3117,3118],{"class":132}," \"冲泡咖啡!\"",[62,3120,136],{"class":68},[62,3122,139],{"class":79},[62,3124,3125],{"class":64,"line":303},[62,3126,145],{"class":79},[62,3128,3129],{"class":64,"line":309},[62,3130,2947],{"class":92},[62,3132,3133,3135,3137,3139],{"class":64,"line":315},[62,3134,105],{"class":68},[62,3136,108],{"class":68},[62,3138,2956],{"class":72},[62,3140,483],{"class":79},[62,3142,3143,3145,3147,3150,3152],{"class":64,"line":321},[62,3144,126],{"class":79},[62,3146,129],{"class":68},[62,3148,3149],{"class":132}," \"将咖啡倒入杯中!\"",[62,3151,136],{"class":68},[62,3153,139],{"class":79},[62,3155,3156],{"class":64,"line":326},[62,3157,145],{"class":79},[62,3159,3160],{"class":64,"line":351},[62,3161,2969],{"class":92},[62,3163,3164,3166,3168,3170],{"class":64,"line":356},[62,3165,105],{"class":68},[62,3167,108],{"class":68},[62,3169,2978],{"class":72},[62,3171,483],{"class":79},[62,3173,3174,3176,3178,3181,3183],{"class":64,"line":368},[62,3175,126],{"class":79},[62,3177,129],{"class":68},[62,3179,3180],{"class":132}," \"加入牛奶!\"",[62,3182,136],{"class":68},[62,3184,139],{"class":79},[62,3186,3187],{"class":64,"line":374},[62,3188,145],{"class":79},[62,3190,3191],{"class":64,"line":380},[62,3192,151],{"class":79},[62,3194,3195],{"class":64,"line":386},[62,3196,158],{"emptyLinePlaceholder":157},[62,3198,3199],{"class":64,"line":392},[62,3200,3201],{"class":92},"\u002F\u002F制作茶水\n",[62,3203,3204,3206,3208,3210,3212,3214],{"class":64,"line":398},[62,3205,69],{"class":68},[62,3207,2821],{"class":72},[62,3209,3054],{"class":79},[62,3211,172],{"class":68},[62,3213,2892],{"class":72},[62,3215,598],{"class":79},[62,3217,3218],{"class":64,"line":404},[62,3219,86],{"class":68},[62,3221,3222],{"class":64,"line":410},[62,3223,2903],{"class":92},[62,3225,3226,3228,3230,3232],{"class":64,"line":415},[62,3227,105],{"class":68},[62,3229,108],{"class":68},[62,3231,2912],{"class":72},[62,3233,483],{"class":79},[62,3235,3236,3238,3240,3243,3245],{"class":64,"line":425},[62,3237,126],{"class":79},[62,3239,129],{"class":68},[62,3241,3242],{"class":132}," \"煮自来水!\"",[62,3244,136],{"class":68},[62,3246,139],{"class":79},[62,3248,3249],{"class":64,"line":430},[62,3250,145],{"class":79},[62,3252,3253],{"class":64,"line":436},[62,3254,2925],{"class":92},[62,3256,3257,3259,3261,3263],{"class":64,"line":445},[62,3258,105],{"class":68},[62,3260,108],{"class":68},[62,3262,2934],{"class":72},[62,3264,483],{"class":79},[62,3266,3267,3269,3271,3274,3276],{"class":64,"line":450},[62,3268,126],{"class":79},[62,3270,129],{"class":68},[62,3272,3273],{"class":132}," \"冲泡茶叶!\"",[62,3275,136],{"class":68},[62,3277,139],{"class":79},[62,3279,3280],{"class":64,"line":456},[62,3281,145],{"class":79},[62,3283,3284],{"class":64,"line":464},[62,3285,2947],{"class":92},[62,3287,3288,3290,3292,3294],{"class":64,"line":469},[62,3289,105],{"class":68},[62,3291,108],{"class":68},[62,3293,2956],{"class":72},[62,3295,483],{"class":79},[62,3297,3298,3300,3302,3305,3307],{"class":64,"line":474},[62,3299,126],{"class":79},[62,3301,129],{"class":68},[62,3303,3304],{"class":132}," \"将茶水倒入杯中!\"",[62,3306,136],{"class":68},[62,3308,139],{"class":79},[62,3310,3311],{"class":64,"line":486},[62,3312,145],{"class":79},[62,3314,3315],{"class":64,"line":491},[62,3316,2969],{"class":92},[62,3318,3319,3321,3323,3325],{"class":64,"line":499},[62,3320,105],{"class":68},[62,3322,108],{"class":68},[62,3324,2978],{"class":72},[62,3326,483],{"class":79},[62,3328,3329,3331,3333,3336,3338],{"class":64,"line":504},[62,3330,126],{"class":79},[62,3332,129],{"class":68},[62,3334,3335],{"class":132}," \"加入枸杞!\"",[62,3337,136],{"class":68},[62,3339,139],{"class":79},[62,3341,3342],{"class":64,"line":509},[62,3343,145],{"class":79},[62,3345,3346],{"class":64,"line":522},[62,3347,151],{"class":79},[62,3349,3350],{"class":64,"line":1897},[62,3351,158],{"emptyLinePlaceholder":157},[62,3353,3354],{"class":64,"line":1911},[62,3355,3356],{"class":92},"\u002F\u002F业务函数\n",[62,3358,3359,3361,3364,3366,3369,3371,3374],{"class":64,"line":1916},[62,3360,329],{"class":68},[62,3362,3363],{"class":72}," DoWork",[62,3365,335],{"class":79},[62,3367,3368],{"class":72},"AbstractDrinking",[62,3370,707],{"class":68},[62,3372,3373],{"class":344}," drink",[62,3375,636],{"class":79},[62,3377,3378,3381,3384],{"class":64,"line":1921},[62,3379,3380],{"class":79},"    drink->",[62,3382,3383],{"class":72},"MakeDrink",[62,3385,365],{"class":79},[62,3387,3388,3390],{"class":64,"line":1930},[62,3389,2134],{"class":68},[62,3391,3392],{"class":79}," drink;\n",[62,3394,3395],{"class":64,"line":1935},[62,3396,371],{"class":79},[62,3398,3399],{"class":64,"line":1946},[62,3400,158],{"emptyLinePlaceholder":157},[62,3402,3403,3405,3407],{"class":64,"line":1951},[62,3404,329],{"class":68},[62,3406,420],{"class":72},[62,3408,483],{"class":79},[62,3410,3411,3414,3416,3419],{"class":64,"line":1956},[62,3412,3413],{"class":72},"    DoWork",[62,3415,335],{"class":79},[62,3417,3418],{"class":68},"new",[62,3420,3421],{"class":79}," Coffee);\n",[62,3423,3424,3426,3428,3431,3433],{"class":64,"line":1961},[62,3425,1611],{"class":79},[62,3427,129],{"class":68},[62,3429,3430],{"class":132}," \"--------------\"",[62,3432,136],{"class":68},[62,3434,139],{"class":79},[62,3436,3437,3439,3441,3443],{"class":64,"line":1967},[62,3438,3413],{"class":72},[62,3440,335],{"class":79},[62,3442,3418],{"class":68},[62,3444,3445],{"class":79}," Tea);\n",[62,3447,3448],{"class":64,"line":1981},[62,3449,371],{"class":79},[62,3451,3452],{"class":64,"line":1986},[62,3453,158],{"emptyLinePlaceholder":157},[62,3455,3456,3458,3460],{"class":64,"line":1991},[62,3457,477],{"class":68},[62,3459,480],{"class":72},[62,3461,483],{"class":79},[62,3463,3464],{"class":64,"line":2000},[62,3465,158],{"emptyLinePlaceholder":157},[62,3467,3468,3470],{"class":64,"line":2005},[62,3469,494],{"class":72},[62,3471,365],{"class":79},[62,3473,3474],{"class":64,"line":2016},[62,3475,158],{"emptyLinePlaceholder":157},[62,3477,3478],{"class":64,"line":2021},[62,3479,158],{"emptyLinePlaceholder":157},[62,3481,3482,3484,3486],{"class":64,"line":2026},[62,3483,512],{"class":68},[62,3485,516],{"class":515},[62,3487,519],{"class":79},[62,3489,3490],{"class":64,"line":2031},[62,3491,371],{"class":79},[18,3493,3494],{},[21,3495,529],{},[52,3497,3500],{"className":3498,"code":3499,"language":535,"meta":57},[533],"煮农夫山泉!\n冲泡咖啡!\n将咖啡倒入杯中!\n加入牛奶!\n--------------\n煮自来水!\n冲泡茶叶!\n将茶水倒入杯中!\n加入枸杞!\n",[59,3501,3499],{"__ignoreMap":57},[13,3503,3505],{"id":3504},"virtual-destructors-and-pure-virtual-destructors","Virtual Destructors and Pure Virtual Destructors",[18,3507,3508],{},"When utilizing polymorphism, if a derived class allocates properties on the heap, the parent class pointer cannot invoke the destructor of the derived class upon deallocation.",[18,3510,3511,3512,3515,3516,2410],{},"Solution: Change the destructor in the base class to a ",[21,3513,3514],{},"virtual destructor"," or a ",[21,3517,3518],{},"pure virtual destructor",[18,3520,3521],{},"Common characteristics of virtual destructors and pure virtual destructors:",[28,3523,3524,3527],{},[31,3525,3526],{},"This can be achieved by releasing a derived class object through a base class pointer, typically by ensuring the base class destructor is declared virtual. This allows proper destruction of the derived object when deleted via a base pointer, invoking the correct destructor in the derived class.",[31,3528,3529],{},"All must have specific function implementations.",[18,3531,3532],{},"Difference between virtual destructors and pure virtual destructors:",[28,3534,3535],{},[31,3536,3537],{},"If a class has a pure virtual destructor, it is considered an abstract class and cannot be instantiated.",[18,3539,3540],{},"Virtual destructor syntax:",[18,3542,3543],{},[59,3544,3545],{},"virtual ~类名(){}",[18,3547,3548],{},"Pure virtual destructor syntax:",[18,3550,3551],{},[59,3552,3553],{}," virtual ~类名() = 0;",[18,3555,3556],{},[59,3557,3558],{},"类名::~类名(){}",[18,3560,3561],{},[21,3562,1393],{},[52,3564,3566],{"className":54,"code":3565,"language":56,"meta":57,"style":57},"class Animal {\npublic:\n\n    Animal()\n    {\n        cout \u003C\u003C \"Animal 构造函数调用！\" \u003C\u003C endl;\n    }\n    virtual void Speak() = 0;\n\n    \u002F\u002F析构函数加上virtual关键字，变成虚析构函数\n    \u002F\u002Fvirtual ~Animal()\n    \u002F\u002F{\n    \u002F\u002F  cout \u003C\u003C \"Animal虚析构函数调用！\" \u003C\u003C endl;\n    \u002F\u002F}\n\n    virtual ~Animal() = 0;\n};\n\nAnimal::~Animal()\n{\n    cout \u003C\u003C \"Animal 纯虚析构函数调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F和包含普通纯虚函数的类一样，包含了纯虚析构函数的类也是一个抽象类。不能够被实例化。\n\nclass Cat : public Animal {\npublic:\n    Cat(string name)\n    {\n        cout \u003C\u003C \"Cat构造函数调用！\" \u003C\u003C endl;\n        m_Name = new string(name);\n    }\n    virtual void Speak()\n    {\n        cout \u003C\u003C *m_Name \u003C\u003C  \"小猫在说话!\" \u003C\u003C endl;\n    }\n    ~Cat()\n    {\n        cout \u003C\u003C \"Cat析构函数调用!\" \u003C\u003C endl;\n        if (this->m_Name != NULL) {\n            delete m_Name;\n            m_Name = NULL;\n        }\n    }\n\npublic:\n    string *m_Name;\n};\n\nvoid test01()\n{\n    Animal *animal = new Cat(\"Tom\");\n    animal->Speak();\n\n    \u002F\u002F通过父类指针去释放，会导致子类对象可能清理不干净，造成内存泄漏\n    \u002F\u002F怎么解决？给基类增加一个虚析构函数\n    \u002F\u002F虚析构函数就是用来解决通过父类指针释放子类对象\n    delete animal;\n}\n\nint main() {\n\n    test01();\n\n\n    return 0;\n}\n",[59,3567,3568,3577,3581,3585,3592,3596,3609,3613,3630,3634,3639,3644,3649,3654,3659,3663,3678,3682,3686,3700,3704,3717,3721,3725,3730,3734,3748,3752,3766,3770,3783,3798,3802,3812,3816,3837,3841,3848,3852,3865,3884,3892,3903,3907,3911,3915,3919,3929,3933,3937,3945,3949,3972,3982,3986,3991,3996,4001,4008,4012,4016,4024,4028,4034,4038,4042,4050],{"__ignoreMap":57},[62,3569,3570,3572,3575],{"class":64,"line":65},[62,3571,69],{"class":68},[62,3573,3574],{"class":72}," Animal",[62,3576,598],{"class":79},[62,3578,3579],{"class":64,"line":76},[62,3580,86],{"class":68},[62,3582,3583],{"class":64,"line":83},[62,3584,158],{"emptyLinePlaceholder":157},[62,3586,3587,3590],{"class":64,"line":89},[62,3588,3589],{"class":72},"    Animal",[62,3591,114],{"class":79},[62,3593,3594],{"class":64,"line":96},[62,3595,120],{"class":79},[62,3597,3598,3600,3602,3605,3607],{"class":64,"line":102},[62,3599,126],{"class":79},[62,3601,129],{"class":68},[62,3603,3604],{"class":132}," \"Animal 构造函数调用！\"",[62,3606,136],{"class":68},[62,3608,139],{"class":79},[62,3610,3611],{"class":64,"line":117},[62,3612,145],{"class":79},[62,3614,3615,3617,3619,3622,3624,3626,3628],{"class":64,"line":123},[62,3616,105],{"class":68},[62,3618,108],{"class":68},[62,3620,3621],{"class":72}," Speak",[62,3623,2124],{"class":79},[62,3625,1240],{"class":68},[62,3627,516],{"class":515},[62,3629,519],{"class":79},[62,3631,3632],{"class":64,"line":142},[62,3633,158],{"emptyLinePlaceholder":157},[62,3635,3636],{"class":64,"line":148},[62,3637,3638],{"class":92},"    \u002F\u002F析构函数加上virtual关键字，变成虚析构函数\n",[62,3640,3641],{"class":64,"line":154},[62,3642,3643],{"class":92},"    \u002F\u002Fvirtual ~Animal()\n",[62,3645,3646],{"class":64,"line":161},[62,3647,3648],{"class":92},"    \u002F\u002F{\n",[62,3650,3651],{"class":64,"line":177},[62,3652,3653],{"class":92},"    \u002F\u002F  cout \u003C\u003C \"Animal虚析构函数调用！\" \u003C\u003C endl;\n",[62,3655,3656],{"class":64,"line":182},[62,3657,3658],{"class":92},"    \u002F\u002F}\n",[62,3660,3661],{"class":64,"line":187},[62,3662,158],{"emptyLinePlaceholder":157},[62,3664,3665,3667,3670,3672,3674,3676],{"class":64,"line":197},[62,3666,105],{"class":68},[62,3668,3669],{"class":72}," ~Animal",[62,3671,2124],{"class":79},[62,3673,1240],{"class":68},[62,3675,516],{"class":515},[62,3677,519],{"class":79},[62,3679,3680],{"class":64,"line":202},[62,3681,151],{"class":79},[62,3683,3684],{"class":64,"line":216},[62,3685,158],{"emptyLinePlaceholder":157},[62,3687,3688,3690,3693,3696,3698],{"class":64,"line":221},[62,3689,338],{"class":72},[62,3691,3692],{"class":79},"::",[62,3694,3695],{"class":68},"~",[62,3697,338],{"class":72},[62,3699,114],{"class":79},[62,3701,3702],{"class":64,"line":226},[62,3703,80],{"class":79},[62,3705,3706,3708,3710,3713,3715],{"class":64,"line":231},[62,3707,1611],{"class":79},[62,3709,129],{"class":68},[62,3711,3712],{"class":132}," \"Animal 纯虚析构函数调用！\"",[62,3714,136],{"class":68},[62,3716,139],{"class":79},[62,3718,3719],{"class":64,"line":245},[62,3720,371],{"class":79},[62,3722,3723],{"class":64,"line":250},[62,3724,158],{"emptyLinePlaceholder":157},[62,3726,3727],{"class":64,"line":255},[62,3728,3729],{"class":92},"\u002F\u002F和包含普通纯虚函数的类一样，包含了纯虚析构函数的类也是一个抽象类。不能够被实例化。\n",[62,3731,3732],{"class":64,"line":260},[62,3733,158],{"emptyLinePlaceholder":157},[62,3735,3736,3738,3740,3742,3744,3746],{"class":64,"line":269},[62,3737,69],{"class":68},[62,3739,166],{"class":72},[62,3741,3054],{"class":79},[62,3743,172],{"class":68},[62,3745,3574],{"class":72},[62,3747,598],{"class":79},[62,3749,3750],{"class":64,"line":274},[62,3751,86],{"class":68},[62,3753,3754,3757,3759,3761,3764],{"class":64,"line":288},[62,3755,3756],{"class":72},"    Cat",[62,3758,335],{"class":79},[62,3760,1428],{"class":72},[62,3762,3763],{"class":344}," name",[62,3765,348],{"class":79},[62,3767,3768],{"class":64,"line":293},[62,3769,120],{"class":79},[62,3771,3772,3774,3776,3779,3781],{"class":64,"line":298},[62,3773,126],{"class":79},[62,3775,129],{"class":68},[62,3777,3778],{"class":132}," \"Cat构造函数调用！\"",[62,3780,136],{"class":68},[62,3782,139],{"class":79},[62,3784,3785,3788,3790,3792,3795],{"class":64,"line":303},[62,3786,3787],{"class":79},"        m_Name ",[62,3789,1240],{"class":68},[62,3791,763],{"class":68},[62,3793,3794],{"class":72}," string",[62,3796,3797],{"class":79},"(name);\n",[62,3799,3800],{"class":64,"line":309},[62,3801,145],{"class":79},[62,3803,3804,3806,3808,3810],{"class":64,"line":315},[62,3805,105],{"class":68},[62,3807,108],{"class":68},[62,3809,3621],{"class":72},[62,3811,114],{"class":79},[62,3813,3814],{"class":64,"line":321},[62,3815,120],{"class":79},[62,3817,3818,3820,3822,3825,3828,3830,3833,3835],{"class":64,"line":326},[62,3819,126],{"class":79},[62,3821,129],{"class":68},[62,3823,3824],{"class":68}," *",[62,3826,3827],{"class":79},"m_Name ",[62,3829,129],{"class":68},[62,3831,3832],{"class":132},"  \"小猫在说话!\"",[62,3834,136],{"class":68},[62,3836,139],{"class":79},[62,3838,3839],{"class":64,"line":351},[62,3840,145],{"class":79},[62,3842,3843,3846],{"class":64,"line":356},[62,3844,3845],{"class":72},"    ~Cat",[62,3847,114],{"class":79},[62,3849,3850],{"class":64,"line":368},[62,3851,120],{"class":79},[62,3853,3854,3856,3858,3861,3863],{"class":64,"line":374},[62,3855,126],{"class":79},[62,3857,129],{"class":68},[62,3859,3860],{"class":132}," \"Cat析构函数调用!\"",[62,3862,136],{"class":68},[62,3864,139],{"class":79},[62,3866,3867,3869,3872,3875,3878,3880,3882],{"class":64,"line":380},[62,3868,1121],{"class":68},[62,3870,3871],{"class":79}," (",[62,3873,3874],{"class":515},"this",[62,3876,3877],{"class":79},"->m_Name ",[62,3879,729],{"class":68},[62,3881,2590],{"class":515},[62,3883,636],{"class":79},[62,3885,3886,3889],{"class":64,"line":386},[62,3887,3888],{"class":68},"            delete",[62,3890,3891],{"class":79}," m_Name;\n",[62,3893,3894,3897,3899,3901],{"class":64,"line":392},[62,3895,3896],{"class":79},"            m_Name ",[62,3898,1240],{"class":68},[62,3900,2590],{"class":515},[62,3902,519],{"class":79},[62,3904,3905],{"class":64,"line":398},[62,3906,810],{"class":79},[62,3908,3909],{"class":64,"line":404},[62,3910,145],{"class":79},[62,3912,3913],{"class":64,"line":410},[62,3914,158],{"emptyLinePlaceholder":157},[62,3916,3917],{"class":64,"line":415},[62,3918,86],{"class":68},[62,3920,3921,3924,3926],{"class":64,"line":425},[62,3922,3923],{"class":79},"    string ",[62,3925,707],{"class":68},[62,3927,3928],{"class":79},"m_Name;\n",[62,3930,3931],{"class":64,"line":430},[62,3932,151],{"class":79},[62,3934,3935],{"class":64,"line":436},[62,3936,158],{"emptyLinePlaceholder":157},[62,3938,3939,3941,3943],{"class":64,"line":445},[62,3940,329],{"class":68},[62,3942,420],{"class":72},[62,3944,114],{"class":79},[62,3946,3947],{"class":64,"line":450},[62,3948,80],{"class":79},[62,3950,3951,3954,3956,3959,3961,3963,3965,3967,3970],{"class":64,"line":456},[62,3952,3953],{"class":79},"    Animal ",[62,3955,707],{"class":68},[62,3957,3958],{"class":79},"animal ",[62,3960,1240],{"class":68},[62,3962,763],{"class":68},[62,3964,166],{"class":72},[62,3966,335],{"class":79},[62,3968,3969],{"class":132},"\"Tom\"",[62,3971,774],{"class":79},[62,3973,3974,3977,3980],{"class":64,"line":464},[62,3975,3976],{"class":79},"    animal->",[62,3978,3979],{"class":72},"Speak",[62,3981,365],{"class":79},[62,3983,3984],{"class":64,"line":469},[62,3985,158],{"emptyLinePlaceholder":157},[62,3987,3988],{"class":64,"line":474},[62,3989,3990],{"class":92},"    \u002F\u002F通过父类指针去释放，会导致子类对象可能清理不干净，造成内存泄漏\n",[62,3992,3993],{"class":64,"line":486},[62,3994,3995],{"class":92},"    \u002F\u002F怎么解决？给基类增加一个虚析构函数\n",[62,3997,3998],{"class":64,"line":491},[62,3999,4000],{"class":92},"    \u002F\u002F虚析构函数就是用来解决通过父类指针释放子类对象\n",[62,4002,4003,4005],{"class":64,"line":499},[62,4004,2134],{"class":68},[62,4006,4007],{"class":79}," animal;\n",[62,4009,4010],{"class":64,"line":504},[62,4011,371],{"class":79},[62,4013,4014],{"class":64,"line":509},[62,4015,158],{"emptyLinePlaceholder":157},[62,4017,4018,4020,4022],{"class":64,"line":522},[62,4019,477],{"class":68},[62,4021,480],{"class":72},[62,4023,483],{"class":79},[62,4025,4026],{"class":64,"line":1897},[62,4027,158],{"emptyLinePlaceholder":157},[62,4029,4030,4032],{"class":64,"line":1911},[62,4031,494],{"class":72},[62,4033,365],{"class":79},[62,4035,4036],{"class":64,"line":1916},[62,4037,158],{"emptyLinePlaceholder":157},[62,4039,4040],{"class":64,"line":1921},[62,4041,158],{"emptyLinePlaceholder":157},[62,4043,4044,4046,4048],{"class":64,"line":1930},[62,4045,512],{"class":68},[62,4047,516],{"class":515},[62,4049,519],{"class":79},[62,4051,4052],{"class":64,"line":1935},[62,4053,371],{"class":79},[18,4055,4056],{},[21,4057,529],{},[52,4059,4062],{"className":4060,"code":4061,"language":535,"meta":57},[533],"Animal 构造函数调用！\nCat构造函数调用！\nTom小猫在说话!\nCat析构函数调用!\nAnimal 纯虚析构函数调用！\n",[59,4063,4061],{"__ignoreMap":57},[18,4065,540],{},[4067,4068,4069,4072,4075],"ol",{},[31,4070,4071],{},"Virtual or pure virtual destructors are used to solve the problem of releasing a subclass object through a parent class pointer.",[31,4073,4074],{},"If there is no heap data in the subclass, you don't need to declare a virtual destructor or a pure virtual destructor.",[31,4076,4077],{},"A class with a pure virtual destructor is also considered an abstract class.",[13,4079,4081],{"id":4080},"polymorphism-case-3-computer-assembly","Polymorphism Case 3-Computer Assembly",[18,4083,4084],{},[21,4085,2697],{},[18,4087,4088],{},"The main components of a computer are the CPU (for calculation), the GPU (for display), and RAM (for storage).",[18,4090,4091],{},"Encapsulate each component into an abstract base class, and provide different manufacturers to produce different components, such as Intel and Lenovo.",[18,4093,4094],{},"Create a computer class that provides functions to make the computer work and call the interfaces for each component to operate.",[18,4096,4097],{},"During testing, three different computers were assembled to perform the work.",[18,4099,4100],{},[21,4101,1393],{},[52,4103,4105],{"className":54,"code":4104,"language":56,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F抽象CPU类\nclass CPU\n{\npublic:\n    \u002F\u002F抽象的计算函数\n    virtual void calculate() = 0;\n};\n\n\u002F\u002F抽象显卡类\nclass VideoCard\n{\npublic:\n    \u002F\u002F抽象的显示函数\n    virtual void display() = 0;\n};\n\n\u002F\u002F抽象内存条类\nclass Memory\n{\npublic:\n    \u002F\u002F抽象的存储函数\n    virtual void storage() = 0;\n};\n\n\u002F\u002F电脑类\nclass Computer\n{\npublic:\n    Computer(CPU * cpu, VideoCard * vc, Memory * mem)\n    {\n        m_cpu = cpu;\n        m_vc = vc;\n        m_mem = mem;\n    }\n\n    \u002F\u002F提供工作的函数\n    void work()\n    {\n        \u002F\u002F让零件工作起来，调用接口\n        m_cpu->calculate();\n\n        m_vc->display();\n\n        m_mem->storage();\n    }\n\n    \u002F\u002F提供析构函数 释放3个电脑零件\n    ~Computer()\n    {\n\n        \u002F\u002F释放CPU零件\n        if (m_cpu != NULL)\n        {\n            delete m_cpu;\n            m_cpu = NULL;\n        }\n\n        \u002F\u002F释放显卡零件\n        if (m_vc != NULL)\n        {\n            delete m_vc;\n            m_vc = NULL;\n        }\n\n        \u002F\u002F释放内存条零件\n        if (m_mem != NULL)\n        {\n            delete m_mem;\n            m_mem = NULL;\n        }\n    }\n\nprivate:\n\n    CPU * m_cpu; \u002F\u002FCPU的零件指针\n    VideoCard * m_vc; \u002F\u002F显卡零件指针\n    Memory * m_mem; \u002F\u002F内存条零件指针\n};\n\n\u002F\u002F具体厂商\n\u002F\u002FIntel厂商\nclass IntelCPU :public CPU\n{\npublic:\n    virtual void calculate()\n    {\n        cout \u003C\u003C \"Intel的CPU开始计算了！\" \u003C\u003C endl;\n    }\n};\n\nclass IntelVideoCard :public VideoCard\n{\npublic:\n    virtual void display()\n    {\n        cout \u003C\u003C \"Intel的显卡开始显示了！\" \u003C\u003C endl;\n    }\n};\n\nclass IntelMemory :public Memory\n{\npublic:\n    virtual void storage()\n    {\n        cout \u003C\u003C \"Intel的内存条开始存储了！\" \u003C\u003C endl;\n    }\n};\n\n\u002F\u002FLenovo厂商\nclass LenovoCPU :public CPU\n{\npublic:\n    virtual void calculate()\n    {\n        cout \u003C\u003C \"Lenovo的CPU开始计算了！\" \u003C\u003C endl;\n    }\n};\n\nclass LenovoVideoCard :public VideoCard\n{\npublic:\n    virtual void display()\n    {\n        cout \u003C\u003C \"Lenovo的显卡开始显示了！\" \u003C\u003C endl;\n    }\n};\n\nclass LenovoMemory :public Memory\n{\npublic:\n    virtual void storage()\n    {\n        cout \u003C\u003C \"Lenovo的内存条开始存储了！\" \u003C\u003C endl;\n    }\n};\n\nvoid test01()\n{\n    \u002F\u002F第一台电脑零件\n    CPU * intelCpu = new IntelCPU;\n    VideoCard * intelCard = new IntelVideoCard;\n    Memory * intelMem = new IntelMemory;\n\n    cout \u003C\u003C \"第一台电脑开始工作：\" \u003C\u003C endl;\n    \u002F\u002F创建第一台电脑\n    Computer * computer1 = new Computer(intelCpu, intelCard, intelMem);\n    computer1->work();\n    delete computer1;\n\n    cout \u003C\u003C \"-----------------------\" \u003C\u003C endl;\n    cout \u003C\u003C \"第二台电脑开始工作：\" \u003C\u003C endl;\n    \u002F\u002F第二台电脑组装\n    Computer * computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);;\n    computer2->work();\n    delete computer2;\n\n    cout \u003C\u003C \"-----------------------\" \u003C\u003C endl;\n    cout \u003C\u003C \"第三台电脑开始工作：\" \u003C\u003C endl;\n    \u002F\u002F第三台电脑组装\n    Computer * computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);;\n    computer3->work();\n    delete computer3;\n\n}\n",[59,4106,4107,4115,4128,4132,4137,4144,4148,4152,4157,4173,4177,4181,4186,4193,4197,4201,4206,4223,4227,4231,4236,4243,4247,4251,4256,4273,4277,4281,4286,4293,4297,4301,4338,4342,4352,4362,4372,4376,4380,4385,4394,4398,4403,4413,4417,4427,4431,4441,4445,4449,4454,4461,4465,4469,4474,4487,4492,4499,4510,4514,4518,4523,4536,4540,4547,4558,4562,4566,4571,4584,4588,4595,4606,4610,4614,4618,4623,4627,4640,4653,4666,4670,4674,4679,4684,4697,4701,4705,4715,4719,4732,4736,4740,4744,4757,4761,4765,4775,4779,4792,4796,4800,4804,4817,4821,4825,4835,4839,4852,4856,4860,4864,4869,4882,4887,4892,4903,4908,4922,4927,4932,4937,4951,4956,4961,4972,4977,4991,4996,5001,5006,5020,5025,5030,5041,5046,5060,5065,5070,5075,5084,5089,5095,5112,5129,5146,5151,5165,5171,5192,5203,5211,5216,5230,5244,5250,5283,5293,5301,5306,5319,5333,5339,5370,5380,5388,5393],{"__ignoreMap":57},[62,4108,4109,4112],{"class":64,"line":65},[62,4110,4111],{"class":68},"#include",[62,4113,4114],{"class":132},"\u003Ciostream>\n",[62,4116,4117,4120,4123,4126],{"class":64,"line":76},[62,4118,4119],{"class":68},"using",[62,4121,4122],{"class":68}," namespace",[62,4124,4125],{"class":72}," std",[62,4127,519],{"class":79},[62,4129,4130],{"class":64,"line":83},[62,4131,158],{"emptyLinePlaceholder":157},[62,4133,4134],{"class":64,"line":89},[62,4135,4136],{"class":92},"\u002F\u002F抽象CPU类\n",[62,4138,4139,4141],{"class":64,"line":96},[62,4140,69],{"class":68},[62,4142,4143],{"class":72}," CPU\n",[62,4145,4146],{"class":64,"line":102},[62,4147,80],{"class":79},[62,4149,4150],{"class":64,"line":117},[62,4151,86],{"class":68},[62,4153,4154],{"class":64,"line":123},[62,4155,4156],{"class":92},"    \u002F\u002F抽象的计算函数\n",[62,4158,4159,4161,4163,4165,4167,4169,4171],{"class":64,"line":142},[62,4160,105],{"class":68},[62,4162,108],{"class":68},[62,4164,609],{"class":72},[62,4166,2124],{"class":79},[62,4168,1240],{"class":68},[62,4170,516],{"class":515},[62,4172,519],{"class":79},[62,4174,4175],{"class":64,"line":148},[62,4176,151],{"class":79},[62,4178,4179],{"class":64,"line":154},[62,4180,158],{"emptyLinePlaceholder":157},[62,4182,4183],{"class":64,"line":161},[62,4184,4185],{"class":92},"\u002F\u002F抽象显卡类\n",[62,4187,4188,4190],{"class":64,"line":177},[62,4189,69],{"class":68},[62,4191,4192],{"class":72}," VideoCard\n",[62,4194,4195],{"class":64,"line":182},[62,4196,80],{"class":79},[62,4198,4199],{"class":64,"line":187},[62,4200,86],{"class":68},[62,4202,4203],{"class":64,"line":197},[62,4204,4205],{"class":92},"    \u002F\u002F抽象的显示函数\n",[62,4207,4208,4210,4212,4215,4217,4219,4221],{"class":64,"line":202},[62,4209,105],{"class":68},[62,4211,108],{"class":68},[62,4213,4214],{"class":72}," display",[62,4216,2124],{"class":79},[62,4218,1240],{"class":68},[62,4220,516],{"class":515},[62,4222,519],{"class":79},[62,4224,4225],{"class":64,"line":216},[62,4226,151],{"class":79},[62,4228,4229],{"class":64,"line":221},[62,4230,158],{"emptyLinePlaceholder":157},[62,4232,4233],{"class":64,"line":226},[62,4234,4235],{"class":92},"\u002F\u002F抽象内存条类\n",[62,4237,4238,4240],{"class":64,"line":231},[62,4239,69],{"class":68},[62,4241,4242],{"class":72}," Memory\n",[62,4244,4245],{"class":64,"line":245},[62,4246,80],{"class":79},[62,4248,4249],{"class":64,"line":250},[62,4250,86],{"class":68},[62,4252,4253],{"class":64,"line":255},[62,4254,4255],{"class":92},"    \u002F\u002F抽象的存储函数\n",[62,4257,4258,4260,4262,4265,4267,4269,4271],{"class":64,"line":260},[62,4259,105],{"class":68},[62,4261,108],{"class":68},[62,4263,4264],{"class":72}," storage",[62,4266,2124],{"class":79},[62,4268,1240],{"class":68},[62,4270,516],{"class":515},[62,4272,519],{"class":79},[62,4274,4275],{"class":64,"line":269},[62,4276,151],{"class":79},[62,4278,4279],{"class":64,"line":274},[62,4280,158],{"emptyLinePlaceholder":157},[62,4282,4283],{"class":64,"line":288},[62,4284,4285],{"class":92},"\u002F\u002F电脑类\n",[62,4287,4288,4290],{"class":64,"line":293},[62,4289,69],{"class":68},[62,4291,4292],{"class":72}," Computer\n",[62,4294,4295],{"class":64,"line":298},[62,4296,80],{"class":79},[62,4298,4299],{"class":64,"line":303},[62,4300,86],{"class":68},[62,4302,4303,4306,4308,4311,4313,4316,4318,4321,4323,4326,4328,4331,4333,4336],{"class":64,"line":309},[62,4304,4305],{"class":72},"    Computer",[62,4307,335],{"class":79},[62,4309,4310],{"class":72},"CPU",[62,4312,3824],{"class":68},[62,4314,4315],{"class":344}," cpu",[62,4317,620],{"class":79},[62,4319,4320],{"class":72},"VideoCard",[62,4322,3824],{"class":68},[62,4324,4325],{"class":344}," vc",[62,4327,620],{"class":79},[62,4329,4330],{"class":72},"Memory",[62,4332,3824],{"class":68},[62,4334,4335],{"class":344}," mem",[62,4337,348],{"class":79},[62,4339,4340],{"class":64,"line":315},[62,4341,120],{"class":79},[62,4343,4344,4347,4349],{"class":64,"line":321},[62,4345,4346],{"class":79},"        m_cpu ",[62,4348,1240],{"class":68},[62,4350,4351],{"class":79}," cpu;\n",[62,4353,4354,4357,4359],{"class":64,"line":326},[62,4355,4356],{"class":79},"        m_vc ",[62,4358,1240],{"class":68},[62,4360,4361],{"class":79}," vc;\n",[62,4363,4364,4367,4369],{"class":64,"line":351},[62,4365,4366],{"class":79},"        m_mem ",[62,4368,1240],{"class":68},[62,4370,4371],{"class":79}," mem;\n",[62,4373,4374],{"class":64,"line":356},[62,4375,145],{"class":79},[62,4377,4378],{"class":64,"line":368},[62,4379,158],{"emptyLinePlaceholder":157},[62,4381,4382],{"class":64,"line":374},[62,4383,4384],{"class":92},"    \u002F\u002F提供工作的函数\n",[62,4386,4387,4389,4392],{"class":64,"line":380},[62,4388,190],{"class":68},[62,4390,4391],{"class":72}," work",[62,4393,114],{"class":79},[62,4395,4396],{"class":64,"line":386},[62,4397,120],{"class":79},[62,4399,4400],{"class":64,"line":392},[62,4401,4402],{"class":92},"        \u002F\u002F让零件工作起来，调用接口\n",[62,4404,4405,4408,4411],{"class":64,"line":398},[62,4406,4407],{"class":79},"        m_cpu->",[62,4409,4410],{"class":72},"calculate",[62,4412,365],{"class":79},[62,4414,4415],{"class":64,"line":404},[62,4416,158],{"emptyLinePlaceholder":157},[62,4418,4419,4422,4425],{"class":64,"line":410},[62,4420,4421],{"class":79},"        m_vc->",[62,4423,4424],{"class":72},"display",[62,4426,365],{"class":79},[62,4428,4429],{"class":64,"line":415},[62,4430,158],{"emptyLinePlaceholder":157},[62,4432,4433,4436,4439],{"class":64,"line":425},[62,4434,4435],{"class":79},"        m_mem->",[62,4437,4438],{"class":72},"storage",[62,4440,365],{"class":79},[62,4442,4443],{"class":64,"line":430},[62,4444,145],{"class":79},[62,4446,4447],{"class":64,"line":436},[62,4448,158],{"emptyLinePlaceholder":157},[62,4450,4451],{"class":64,"line":445},[62,4452,4453],{"class":92},"    \u002F\u002F提供析构函数 释放3个电脑零件\n",[62,4455,4456,4459],{"class":64,"line":450},[62,4457,4458],{"class":72},"    ~Computer",[62,4460,114],{"class":79},[62,4462,4463],{"class":64,"line":456},[62,4464,120],{"class":79},[62,4466,4467],{"class":64,"line":464},[62,4468,158],{"emptyLinePlaceholder":157},[62,4470,4471],{"class":64,"line":469},[62,4472,4473],{"class":92},"        \u002F\u002F释放CPU零件\n",[62,4475,4476,4478,4481,4483,4485],{"class":64,"line":474},[62,4477,1121],{"class":68},[62,4479,4480],{"class":79}," (m_cpu ",[62,4482,729],{"class":68},[62,4484,2590],{"class":515},[62,4486,348],{"class":79},[62,4488,4489],{"class":64,"line":486},[62,4490,4491],{"class":79},"        {\n",[62,4493,4494,4496],{"class":64,"line":491},[62,4495,3888],{"class":68},[62,4497,4498],{"class":79}," m_cpu;\n",[62,4500,4501,4504,4506,4508],{"class":64,"line":499},[62,4502,4503],{"class":79},"            m_cpu ",[62,4505,1240],{"class":68},[62,4507,2590],{"class":515},[62,4509,519],{"class":79},[62,4511,4512],{"class":64,"line":504},[62,4513,810],{"class":79},[62,4515,4516],{"class":64,"line":509},[62,4517,158],{"emptyLinePlaceholder":157},[62,4519,4520],{"class":64,"line":522},[62,4521,4522],{"class":92},"        \u002F\u002F释放显卡零件\n",[62,4524,4525,4527,4530,4532,4534],{"class":64,"line":1897},[62,4526,1121],{"class":68},[62,4528,4529],{"class":79}," (m_vc ",[62,4531,729],{"class":68},[62,4533,2590],{"class":515},[62,4535,348],{"class":79},[62,4537,4538],{"class":64,"line":1911},[62,4539,4491],{"class":79},[62,4541,4542,4544],{"class":64,"line":1916},[62,4543,3888],{"class":68},[62,4545,4546],{"class":79}," m_vc;\n",[62,4548,4549,4552,4554,4556],{"class":64,"line":1921},[62,4550,4551],{"class":79},"            m_vc ",[62,4553,1240],{"class":68},[62,4555,2590],{"class":515},[62,4557,519],{"class":79},[62,4559,4560],{"class":64,"line":1930},[62,4561,810],{"class":79},[62,4563,4564],{"class":64,"line":1935},[62,4565,158],{"emptyLinePlaceholder":157},[62,4567,4568],{"class":64,"line":1946},[62,4569,4570],{"class":92},"        \u002F\u002F释放内存条零件\n",[62,4572,4573,4575,4578,4580,4582],{"class":64,"line":1951},[62,4574,1121],{"class":68},[62,4576,4577],{"class":79}," (m_mem ",[62,4579,729],{"class":68},[62,4581,2590],{"class":515},[62,4583,348],{"class":79},[62,4585,4586],{"class":64,"line":1956},[62,4587,4491],{"class":79},[62,4589,4590,4592],{"class":64,"line":1961},[62,4591,3888],{"class":68},[62,4593,4594],{"class":79}," m_mem;\n",[62,4596,4597,4600,4602,4604],{"class":64,"line":1967},[62,4598,4599],{"class":79},"            m_mem ",[62,4601,1240],{"class":68},[62,4603,2590],{"class":515},[62,4605,519],{"class":79},[62,4607,4608],{"class":64,"line":1981},[62,4609,810],{"class":79},[62,4611,4612],{"class":64,"line":1986},[62,4613,145],{"class":79},[62,4615,4616],{"class":64,"line":1991},[62,4617,158],{"emptyLinePlaceholder":157},[62,4619,4620],{"class":64,"line":2000},[62,4621,4622],{"class":68},"private:\n",[62,4624,4625],{"class":64,"line":2005},[62,4626,158],{"emptyLinePlaceholder":157},[62,4628,4629,4632,4634,4637],{"class":64,"line":2016},[62,4630,4631],{"class":79},"    CPU ",[62,4633,707],{"class":68},[62,4635,4636],{"class":79}," m_cpu;",[62,4638,4639],{"class":92}," \u002F\u002FCPU的零件指针\n",[62,4641,4642,4645,4647,4650],{"class":64,"line":2021},[62,4643,4644],{"class":79},"    VideoCard ",[62,4646,707],{"class":68},[62,4648,4649],{"class":79}," m_vc;",[62,4651,4652],{"class":92}," \u002F\u002F显卡零件指针\n",[62,4654,4655,4658,4660,4663],{"class":64,"line":2026},[62,4656,4657],{"class":79},"    Memory ",[62,4659,707],{"class":68},[62,4661,4662],{"class":79}," m_mem;",[62,4664,4665],{"class":92}," \u002F\u002F内存条零件指针\n",[62,4667,4668],{"class":64,"line":2031},[62,4669,151],{"class":79},[62,4671,4672],{"class":64,"line":2041},[62,4673,158],{"emptyLinePlaceholder":157},[62,4675,4676],{"class":64,"line":2046},[62,4677,4678],{"class":92},"\u002F\u002F具体厂商\n",[62,4680,4681],{"class":64,"line":2052},[62,4682,4683],{"class":92},"\u002F\u002FIntel厂商\n",[62,4685,4686,4688,4691,4693,4695],{"class":64,"line":2070},[62,4687,69],{"class":68},[62,4689,4690],{"class":72}," IntelCPU",[62,4692,169],{"class":79},[62,4694,172],{"class":68},[62,4696,4143],{"class":72},[62,4698,4699],{"class":64,"line":2082},[62,4700,80],{"class":79},[62,4702,4703],{"class":64,"line":2094},[62,4704,86],{"class":68},[62,4706,4707,4709,4711,4713],{"class":64,"line":2131},[62,4708,105],{"class":68},[62,4710,108],{"class":68},[62,4712,609],{"class":72},[62,4714,114],{"class":79},[62,4716,4717],{"class":64,"line":2143},[62,4718,120],{"class":79},[62,4720,4721,4723,4725,4728,4730],{"class":64,"line":2148},[62,4722,126],{"class":79},[62,4724,129],{"class":68},[62,4726,4727],{"class":132}," \"Intel的CPU开始计算了！\"",[62,4729,136],{"class":68},[62,4731,139],{"class":79},[62,4733,4734],{"class":64,"line":2154},[62,4735,145],{"class":79},[62,4737,4738],{"class":64,"line":2167},[62,4739,151],{"class":79},[62,4741,4742],{"class":64,"line":2178},[62,4743,158],{"emptyLinePlaceholder":157},[62,4745,4746,4748,4751,4753,4755],{"class":64,"line":2189},[62,4747,69],{"class":68},[62,4749,4750],{"class":72}," IntelVideoCard",[62,4752,169],{"class":79},[62,4754,172],{"class":68},[62,4756,4192],{"class":72},[62,4758,4759],{"class":64,"line":2222},[62,4760,80],{"class":79},[62,4762,4763],{"class":64,"line":2230},[62,4764,86],{"class":68},[62,4766,4767,4769,4771,4773],{"class":64,"line":2235},[62,4768,105],{"class":68},[62,4770,108],{"class":68},[62,4772,4214],{"class":72},[62,4774,114],{"class":79},[62,4776,4777],{"class":64,"line":2241},[62,4778,120],{"class":79},[62,4780,4781,4783,4785,4788,4790],{"class":64,"line":2253},[62,4782,126],{"class":79},[62,4784,129],{"class":68},[62,4786,4787],{"class":132}," \"Intel的显卡开始显示了！\"",[62,4789,136],{"class":68},[62,4791,139],{"class":79},[62,4793,4794],{"class":64,"line":2264},[62,4795,145],{"class":79},[62,4797,4798],{"class":64,"line":2275},[62,4799,151],{"class":79},[62,4801,4802],{"class":64,"line":2308},[62,4803,158],{"emptyLinePlaceholder":157},[62,4805,4806,4808,4811,4813,4815],{"class":64,"line":2316},[62,4807,69],{"class":68},[62,4809,4810],{"class":72}," IntelMemory",[62,4812,169],{"class":79},[62,4814,172],{"class":68},[62,4816,4242],{"class":72},[62,4818,4819],{"class":64,"line":2321},[62,4820,80],{"class":79},[62,4822,4823],{"class":64,"line":2326},[62,4824,86],{"class":68},[62,4826,4827,4829,4831,4833],{"class":64,"line":2335},[62,4828,105],{"class":68},[62,4830,108],{"class":68},[62,4832,4264],{"class":72},[62,4834,114],{"class":79},[62,4836,4837],{"class":64,"line":2340},[62,4838,120],{"class":79},[62,4840,4841,4843,4845,4848,4850],{"class":64,"line":2346},[62,4842,126],{"class":79},[62,4844,129],{"class":68},[62,4846,4847],{"class":132}," \"Intel的内存条开始存储了！\"",[62,4849,136],{"class":68},[62,4851,139],{"class":79},[62,4853,4854],{"class":64,"line":2351},[62,4855,145],{"class":79},[62,4857,4858],{"class":64,"line":2359},[62,4859,151],{"class":79},[62,4861,4862],{"class":64,"line":2364},[62,4863,158],{"emptyLinePlaceholder":157},[62,4865,4866],{"class":64,"line":2369},[62,4867,4868],{"class":92},"\u002F\u002FLenovo厂商\n",[62,4870,4871,4873,4876,4878,4880],{"class":64,"line":2378},[62,4872,69],{"class":68},[62,4874,4875],{"class":72}," LenovoCPU",[62,4877,169],{"class":79},[62,4879,172],{"class":68},[62,4881,4143],{"class":72},[62,4883,4885],{"class":64,"line":4884},114,[62,4886,80],{"class":79},[62,4888,4890],{"class":64,"line":4889},115,[62,4891,86],{"class":68},[62,4893,4895,4897,4899,4901],{"class":64,"line":4894},116,[62,4896,105],{"class":68},[62,4898,108],{"class":68},[62,4900,609],{"class":72},[62,4902,114],{"class":79},[62,4904,4906],{"class":64,"line":4905},117,[62,4907,120],{"class":79},[62,4909,4911,4913,4915,4918,4920],{"class":64,"line":4910},118,[62,4912,126],{"class":79},[62,4914,129],{"class":68},[62,4916,4917],{"class":132}," \"Lenovo的CPU开始计算了！\"",[62,4919,136],{"class":68},[62,4921,139],{"class":79},[62,4923,4925],{"class":64,"line":4924},119,[62,4926,145],{"class":79},[62,4928,4930],{"class":64,"line":4929},120,[62,4931,151],{"class":79},[62,4933,4935],{"class":64,"line":4934},121,[62,4936,158],{"emptyLinePlaceholder":157},[62,4938,4940,4942,4945,4947,4949],{"class":64,"line":4939},122,[62,4941,69],{"class":68},[62,4943,4944],{"class":72}," LenovoVideoCard",[62,4946,169],{"class":79},[62,4948,172],{"class":68},[62,4950,4192],{"class":72},[62,4952,4954],{"class":64,"line":4953},123,[62,4955,80],{"class":79},[62,4957,4959],{"class":64,"line":4958},124,[62,4960,86],{"class":68},[62,4962,4964,4966,4968,4970],{"class":64,"line":4963},125,[62,4965,105],{"class":68},[62,4967,108],{"class":68},[62,4969,4214],{"class":72},[62,4971,114],{"class":79},[62,4973,4975],{"class":64,"line":4974},126,[62,4976,120],{"class":79},[62,4978,4980,4982,4984,4987,4989],{"class":64,"line":4979},127,[62,4981,126],{"class":79},[62,4983,129],{"class":68},[62,4985,4986],{"class":132}," \"Lenovo的显卡开始显示了！\"",[62,4988,136],{"class":68},[62,4990,139],{"class":79},[62,4992,4994],{"class":64,"line":4993},128,[62,4995,145],{"class":79},[62,4997,4999],{"class":64,"line":4998},129,[62,5000,151],{"class":79},[62,5002,5004],{"class":64,"line":5003},130,[62,5005,158],{"emptyLinePlaceholder":157},[62,5007,5009,5011,5014,5016,5018],{"class":64,"line":5008},131,[62,5010,69],{"class":68},[62,5012,5013],{"class":72}," LenovoMemory",[62,5015,169],{"class":79},[62,5017,172],{"class":68},[62,5019,4242],{"class":72},[62,5021,5023],{"class":64,"line":5022},132,[62,5024,80],{"class":79},[62,5026,5028],{"class":64,"line":5027},133,[62,5029,86],{"class":68},[62,5031,5033,5035,5037,5039],{"class":64,"line":5032},134,[62,5034,105],{"class":68},[62,5036,108],{"class":68},[62,5038,4264],{"class":72},[62,5040,114],{"class":79},[62,5042,5044],{"class":64,"line":5043},135,[62,5045,120],{"class":79},[62,5047,5049,5051,5053,5056,5058],{"class":64,"line":5048},136,[62,5050,126],{"class":79},[62,5052,129],{"class":68},[62,5054,5055],{"class":132}," \"Lenovo的内存条开始存储了！\"",[62,5057,136],{"class":68},[62,5059,139],{"class":79},[62,5061,5063],{"class":64,"line":5062},137,[62,5064,145],{"class":79},[62,5066,5068],{"class":64,"line":5067},138,[62,5069,151],{"class":79},[62,5071,5073],{"class":64,"line":5072},139,[62,5074,158],{"emptyLinePlaceholder":157},[62,5076,5078,5080,5082],{"class":64,"line":5077},140,[62,5079,329],{"class":68},[62,5081,420],{"class":72},[62,5083,114],{"class":79},[62,5085,5087],{"class":64,"line":5086},141,[62,5088,80],{"class":79},[62,5090,5092],{"class":64,"line":5091},142,[62,5093,5094],{"class":92},"    \u002F\u002F第一台电脑零件\n",[62,5096,5098,5100,5102,5105,5107,5109],{"class":64,"line":5097},143,[62,5099,4631],{"class":79},[62,5101,707],{"class":68},[62,5103,5104],{"class":79}," intelCpu ",[62,5106,1240],{"class":68},[62,5108,763],{"class":68},[62,5110,5111],{"class":79}," IntelCPU;\n",[62,5113,5115,5117,5119,5122,5124,5126],{"class":64,"line":5114},144,[62,5116,4644],{"class":79},[62,5118,707],{"class":68},[62,5120,5121],{"class":79}," intelCard ",[62,5123,1240],{"class":68},[62,5125,763],{"class":68},[62,5127,5128],{"class":79}," IntelVideoCard;\n",[62,5130,5132,5134,5136,5139,5141,5143],{"class":64,"line":5131},145,[62,5133,4657],{"class":79},[62,5135,707],{"class":68},[62,5137,5138],{"class":79}," intelMem ",[62,5140,1240],{"class":68},[62,5142,763],{"class":68},[62,5144,5145],{"class":79}," IntelMemory;\n",[62,5147,5149],{"class":64,"line":5148},146,[62,5150,158],{"emptyLinePlaceholder":157},[62,5152,5154,5156,5158,5161,5163],{"class":64,"line":5153},147,[62,5155,1611],{"class":79},[62,5157,129],{"class":68},[62,5159,5160],{"class":132}," \"第一台电脑开始工作：\"",[62,5162,136],{"class":68},[62,5164,139],{"class":79},[62,5166,5168],{"class":64,"line":5167},148,[62,5169,5170],{"class":92},"    \u002F\u002F创建第一台电脑\n",[62,5172,5174,5177,5179,5182,5184,5186,5189],{"class":64,"line":5173},149,[62,5175,5176],{"class":79},"    Computer ",[62,5178,707],{"class":68},[62,5180,5181],{"class":79}," computer1 ",[62,5183,1240],{"class":68},[62,5185,763],{"class":68},[62,5187,5188],{"class":72}," Computer",[62,5190,5191],{"class":79},"(intelCpu, intelCard, intelMem);\n",[62,5193,5195,5198,5201],{"class":64,"line":5194},150,[62,5196,5197],{"class":79},"    computer1->",[62,5199,5200],{"class":72},"work",[62,5202,365],{"class":79},[62,5204,5206,5208],{"class":64,"line":5205},151,[62,5207,2134],{"class":68},[62,5209,5210],{"class":79}," computer1;\n",[62,5212,5214],{"class":64,"line":5213},152,[62,5215,158],{"emptyLinePlaceholder":157},[62,5217,5219,5221,5223,5226,5228],{"class":64,"line":5218},153,[62,5220,1611],{"class":79},[62,5222,129],{"class":68},[62,5224,5225],{"class":132}," \"-----------------------\"",[62,5227,136],{"class":68},[62,5229,139],{"class":79},[62,5231,5233,5235,5237,5240,5242],{"class":64,"line":5232},154,[62,5234,1611],{"class":79},[62,5236,129],{"class":68},[62,5238,5239],{"class":132}," \"第二台电脑开始工作：\"",[62,5241,136],{"class":68},[62,5243,139],{"class":79},[62,5245,5247],{"class":64,"line":5246},155,[62,5248,5249],{"class":92},"    \u002F\u002F第二台电脑组装\n",[62,5251,5253,5255,5257,5260,5262,5264,5266,5268,5270,5273,5275,5278,5280],{"class":64,"line":5252},156,[62,5254,5176],{"class":79},[62,5256,707],{"class":68},[62,5258,5259],{"class":79}," computer2 ",[62,5261,1240],{"class":68},[62,5263,763],{"class":68},[62,5265,5188],{"class":72},[62,5267,335],{"class":79},[62,5269,3418],{"class":68},[62,5271,5272],{"class":79}," LenovoCPU, ",[62,5274,3418],{"class":68},[62,5276,5277],{"class":79}," LenovoVideoCard, ",[62,5279,3418],{"class":68},[62,5281,5282],{"class":79}," LenovoMemory);;\n",[62,5284,5286,5289,5291],{"class":64,"line":5285},157,[62,5287,5288],{"class":79},"    computer2->",[62,5290,5200],{"class":72},[62,5292,365],{"class":79},[62,5294,5296,5298],{"class":64,"line":5295},158,[62,5297,2134],{"class":68},[62,5299,5300],{"class":79}," computer2;\n",[62,5302,5304],{"class":64,"line":5303},159,[62,5305,158],{"emptyLinePlaceholder":157},[62,5307,5309,5311,5313,5315,5317],{"class":64,"line":5308},160,[62,5310,1611],{"class":79},[62,5312,129],{"class":68},[62,5314,5225],{"class":132},[62,5316,136],{"class":68},[62,5318,139],{"class":79},[62,5320,5322,5324,5326,5329,5331],{"class":64,"line":5321},161,[62,5323,1611],{"class":79},[62,5325,129],{"class":68},[62,5327,5328],{"class":132}," \"第三台电脑开始工作：\"",[62,5330,136],{"class":68},[62,5332,139],{"class":79},[62,5334,5336],{"class":64,"line":5335},162,[62,5337,5338],{"class":92},"    \u002F\u002F第三台电脑组装\n",[62,5340,5342,5344,5346,5349,5351,5353,5355,5357,5359,5361,5363,5366,5368],{"class":64,"line":5341},163,[62,5343,5176],{"class":79},[62,5345,707],{"class":68},[62,5347,5348],{"class":79}," computer3 ",[62,5350,1240],{"class":68},[62,5352,763],{"class":68},[62,5354,5188],{"class":72},[62,5356,335],{"class":79},[62,5358,3418],{"class":68},[62,5360,5272],{"class":79},[62,5362,3418],{"class":68},[62,5364,5365],{"class":79}," IntelVideoCard, ",[62,5367,3418],{"class":68},[62,5369,5282],{"class":79},[62,5371,5373,5376,5378],{"class":64,"line":5372},164,[62,5374,5375],{"class":79},"    computer3->",[62,5377,5200],{"class":72},[62,5379,365],{"class":79},[62,5381,5383,5385],{"class":64,"line":5382},165,[62,5384,2134],{"class":68},[62,5386,5387],{"class":79}," computer3;\n",[62,5389,5391],{"class":64,"line":5390},166,[62,5392,158],{"emptyLinePlaceholder":157},[62,5394,5396],{"class":64,"line":5395},167,[62,5397,371],{"class":79},[18,5399,5400,5402,5403,5406],{},[21,5401,529],{}," 此代码块不含 ",[59,5404,5405],{},"main"," 函数，是语法、接口或分文件示例，不能独立运行，因此没有终端输出。",[5408,5409,5410],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":57,"searchDepth":76,"depth":76,"links":5412},[5413,5414,5415,5416],{"id":5,"depth":83,"text":5},{"id":575,"depth":83,"text":578},{"id":824,"depth":83,"text":827},{"id":1339,"depth":83,"text":1342},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","1400-0600","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态",false,null,"en-US","en-us",{},{"title":5,"description":57},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","0L8D0qIoU3LC50UGI4RCATDLz4YrLRaeOr8hN5Gkg6A",[5436,5442,5447,5452,5457,5462,5467,5472,5477,5482,5487,5492,5497,5502,5507,5512,5517,5522,5527,5528,5533,5538,5543,5548,5553,5558,5563,5568,5573,5578,5583,5588,5593,5598,5603,5608,5613,5618,5623,5628,5632,5637,5642,5647,5652,5657,5662,5667,5672,5677,5682,5687,5692,5697,5702,5707,5712,5717,5722,5727,5732,5737,5742,5747,5752,5757,5762,5767,5772,5777,5782,5787,5792,5797,5802,5807,5812,5817,5822,5827,5832,5837],{"path":5437,"stem":5438,"title":5439,"date":5419,"chapterOrder":5440,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":5443,"stem":5444,"title":5445,"date":5419,"chapterOrder":5446,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":5448,"stem":5449,"title":5450,"date":5419,"chapterOrder":5451,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":5453,"stem":5454,"title":5455,"date":5419,"chapterOrder":5456,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":5458,"stem":5459,"title":5460,"date":5419,"chapterOrder":5461,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":5463,"stem":5464,"title":5465,"date":5419,"chapterOrder":5466,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":5468,"stem":5469,"title":5470,"date":5419,"chapterOrder":5471,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":5473,"stem":5474,"title":5475,"date":5419,"chapterOrder":5476,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":5478,"stem":5479,"title":5480,"date":5419,"chapterOrder":5481,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":5483,"stem":5484,"title":5485,"date":5419,"chapterOrder":5486,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":5488,"stem":5489,"title":5490,"date":5419,"chapterOrder":5491,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":5493,"stem":5494,"title":5495,"date":5419,"chapterOrder":5496,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":5498,"stem":5499,"title":5500,"date":5419,"chapterOrder":5501,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":5503,"stem":5504,"title":5505,"date":5419,"chapterOrder":5506,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":5508,"stem":5509,"title":5510,"date":5419,"chapterOrder":5511,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":5513,"stem":5514,"title":5515,"date":5419,"chapterOrder":5516,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":5518,"stem":5519,"title":5520,"date":5419,"chapterOrder":5521,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":5523,"stem":5524,"title":5525,"date":5419,"chapterOrder":5526,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":5417,"stem":5433,"title":5,"date":5419,"chapterOrder":5418,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},{"path":5529,"stem":5530,"title":5531,"date":5419,"chapterOrder":5532,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":5534,"stem":5535,"title":5536,"date":5419,"chapterOrder":5537,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":5539,"stem":5540,"title":5541,"date":5419,"chapterOrder":5542,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":5544,"stem":5545,"title":5546,"date":5419,"chapterOrder":5547,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":5549,"stem":5550,"title":5551,"date":5419,"chapterOrder":5552,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":5554,"stem":5555,"title":5556,"date":5419,"chapterOrder":5557,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":5559,"stem":5560,"title":5561,"date":5419,"chapterOrder":5562,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":5564,"stem":5565,"title":5566,"date":5419,"chapterOrder":5567,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":5569,"stem":5570,"title":5571,"date":5419,"chapterOrder":5572,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":5574,"stem":5575,"title":5576,"date":5419,"chapterOrder":5577,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":5579,"stem":5580,"title":5581,"date":5419,"chapterOrder":5582,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":5584,"stem":5585,"title":5586,"date":5419,"chapterOrder":5587,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":5589,"stem":5590,"title":5591,"date":5419,"chapterOrder":5592,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":5594,"stem":5595,"title":5596,"date":5419,"chapterOrder":5597,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":5599,"stem":5600,"title":5601,"date":5419,"chapterOrder":5602,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":5604,"stem":5605,"title":5606,"date":5419,"chapterOrder":5607,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":5609,"stem":5610,"title":5611,"date":5419,"chapterOrder":5612,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":5614,"stem":5615,"title":5616,"date":5419,"chapterOrder":5617,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":5619,"stem":5620,"title":5621,"date":5419,"chapterOrder":5622,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":5624,"stem":5625,"title":5626,"date":5419,"chapterOrder":5627,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":5629,"stem":5630,"title":4119,"date":5419,"chapterOrder":5631,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","2000-0300",{"path":5633,"stem":5634,"title":5635,"date":5419,"chapterOrder":5636,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":5638,"stem":5639,"title":5640,"date":5419,"chapterOrder":5641,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":5643,"stem":5644,"title":5645,"date":5419,"chapterOrder":5646,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":5648,"stem":5649,"title":5650,"date":5419,"chapterOrder":5651,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":5653,"stem":5654,"title":5655,"date":5419,"chapterOrder":5656,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":5658,"stem":5659,"title":5660,"date":5419,"chapterOrder":5661,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":5663,"stem":5664,"title":5665,"date":5419,"chapterOrder":5666,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":5668,"stem":5669,"title":5670,"date":5419,"chapterOrder":5671,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":5673,"stem":5674,"title":5675,"date":5419,"chapterOrder":5676,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":5678,"stem":5679,"title":5680,"date":5419,"chapterOrder":5681,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":5683,"stem":5684,"title":5685,"date":5419,"chapterOrder":5686,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":5688,"stem":5689,"title":5690,"date":5419,"chapterOrder":5691,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":5693,"stem":5694,"title":5695,"date":5419,"chapterOrder":5696,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":5698,"stem":5699,"title":5700,"date":5419,"chapterOrder":5701,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":5703,"stem":5704,"title":5705,"date":5419,"chapterOrder":5706,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":5708,"stem":5709,"title":5710,"date":5419,"chapterOrder":5711,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":5713,"stem":5714,"title":5715,"date":5419,"chapterOrder":5716,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":5718,"stem":5719,"title":5720,"date":5419,"chapterOrder":5721,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":5723,"stem":5724,"title":5725,"date":5419,"chapterOrder":5726,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":5728,"stem":5729,"title":5730,"date":5419,"chapterOrder":5731,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":5733,"stem":5734,"title":5735,"date":5419,"chapterOrder":5736,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":5738,"stem":5739,"title":5740,"date":5419,"chapterOrder":5741,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":5743,"stem":5744,"title":5745,"date":5419,"chapterOrder":5746,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":5748,"stem":5749,"title":5750,"date":5419,"chapterOrder":5751,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":5753,"stem":5754,"title":5755,"date":5419,"chapterOrder":5756,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":5758,"stem":5759,"title":5760,"date":5419,"chapterOrder":5761,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":5763,"stem":5764,"title":5765,"date":5419,"chapterOrder":5766,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":5768,"stem":5769,"title":5770,"date":5419,"chapterOrder":5771,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":5773,"stem":5774,"title":5775,"date":5419,"chapterOrder":5776,"chapterDepth":76,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":5778,"stem":5779,"title":5780,"date":5419,"chapterOrder":5781,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio asynchronous IO library","2100-0100",{"path":5783,"stem":5784,"title":5785,"date":5419,"chapterOrder":5786,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":5788,"stem":5789,"title":5790,"date":5419,"chapterOrder":5791,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":5793,"stem":5794,"title":5795,"date":5419,"chapterOrder":5796,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":5798,"stem":5799,"title":5800,"date":5419,"chapterOrder":5801,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":5803,"stem":5804,"title":5805,"date":5419,"chapterOrder":5806,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":5808,"stem":5809,"title":5810,"date":5419,"chapterOrder":5811,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":5813,"stem":5814,"title":5815,"date":5419,"chapterOrder":5816,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","Top-level CMake and Public Compilation Options","2200-0200",{"path":5818,"stem":5819,"title":5820,"date":5419,"chapterOrder":5821,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":5823,"stem":5824,"title":5825,"date":5419,"chapterOrder":5826,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","How to write third-party library dependencies","2200-0400",{"path":5828,"stem":5829,"title":5830,"date":5419,"chapterOrder":5831,"chapterDepth":65,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":5833,"stem":5834,"title":5835,"date":5419,"chapterOrder":5836,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":5426},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":5422,"stem":5838,"title":5839,"date":5419,"chapterOrder":5427,"chapterDepth":5441,"docKey":5421,"docRoot":5422,"docTitle":5423,"isWikiDoc":157,"isWikiIndex":157},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":5841},[5842,5843,5846,5849,5852],{"path":5417,"localeSlug":5429,"i18nKey":5425},{"path":5844,"localeSlug":5845,"i18nKey":5425},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","zh-hant",{"path":5847,"localeSlug":5848,"i18nKey":5425},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","zh-hk",{"path":5850,"localeSlug":5851,"i18nKey":5425},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","zh-tw",{"path":5853,"localeSlug":5854,"i18nKey":5425},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","zh-cn",[5417,5432,5844,5432,5847,5432,5850,5432,5853,5432],1784646863709]