[{"data":1,"prerenderedAt":376},["ShallowReactive",2],{"content:\u002F2026\u002Fcpp-oop-final-exam-shortcut":3,"surround:\u002F2026\u002Fcpp-oop-final-exam-shortcut":366},{"id":4,"title":5,"body":6,"categories":331,"date":334,"description":335,"draft":336,"extension":337,"image":338,"meta":339,"navigation":341,"path":342,"permalink":342,"published":338,"readingTime":343,"recommend":338,"references":348,"seo":355,"sitemap":356,"stem":357,"tags":358,"type":364,"updated":334,"__hash__":365},"content\u002Fposts\u002F2026\u002FC++面向对象期末考试逃课教程.md","C++面向对象的程序设计期末考试逃课教程",{"type":7,"value":8,"toc":316},"minimark",[9,13,22,26,29,65,75,81,88,111,114,123,127,132,135,138,157,162,165,168,179,185,189,192,205,211,229,235,246,252,255,259,265,269,272,275,284,288,291,297,301,304,313],[10,11,5],"h2",{"id":12},"c面向对象的程序设计期末考试逃课教程",[14,15,18],"alert",{"title":16,"type":17},"写在开始","warning",[19,20,21],"p",{},"这个方式并非正道，只是在课余时间发现的奇巧淫技，务必不要在正式考试时使用",[10,23,25],{"id":24},"_1概述","1.概述",[19,27,28],{},"期末考试大多数题目的要求如下",[30,31,34,45,48,56,59],"folding",{"title":32,":open":33},"题目样例","true",[35,36,42],"pre",{"className":37,"code":39,"language":40,"meta":41},[38],"language-cpp","\u002F\u002F题目要求实现一个String类，并且输入n个字符串拼接在一起输出\n#include \u003Ciostream>\n#include \u003Ccstring>\nusing namespace std;\n\n\u002F\u002F 你提交的代码在这里\n\nint main()\n{\n    int n, i, j;\n    cin >> n;\n    CSTRING t, *cs = new CSTRING[n];\n    for (i = 0; i \u003C n; i++)\n        cin >> cs[i];\n    for (i = 0; i \u003C n; i++)\n        t += cs[i];\n    cout \u003C\u003C t \u003C\u003C endl;\n    delete[] cs;\n    return 0;\n}\n","cpp","",[43,44,39],"code",{"__ignoreMap":41},[19,46,47],{},"in:",[35,49,54],{"className":50,"code":52,"language":53,"meta":41},[51],"language-txt","5\nccccc bbbbbb rrrrr aaaaaaaa ddddd\n","txt",[43,55,52],{"__ignoreMap":41},[19,57,58],{},"out:",[35,60,63],{"className":61,"code":62,"language":53,"meta":41},[51],"cccccbbbbbbrrrrraaaaaaaaddddd\n",[43,64,62],{"__ignoreMap":41},[66,67,69,72],"quote",{"icon":68},"tabler:bulb",[19,70,71],{},"最后一道的函数题大多数给我们一个main函数，要求我们实现main函数中所调用的类。",[19,73,74],{},"由此发散思维展开联想，我们可以使用宏定义大法把题目所给的main函数直接define掉",[35,76,79],{"className":77,"code":78,"language":40,"meta":41},[38],"#define main old_main\n\n\u002F\u002F类比#define int long long\n",[43,80,78],{"__ignoreMap":41},[19,82,83,84,87],{},"然后直接使用",[43,85,86],{"code":86},"cout","输出题目要求的内容即可",[14,89,92],{"title":90,"type":91},"注意","info",[19,93,94,95,98,99,103,104,107,108],{},"然而想法很美好，直接一个",[43,96,97],{"code":97},"#define main old_main","上去，",[100,101,102],"del",{},"编译直接报错","。这是因为",[43,105,106],{"code":106},"old_main","函数中的代码虽然没有调用不会被运行，但是它仍然是代码的一部分会被编译，其中的类没有被定义自然就会编译错误。所以我们就需要把所有的类声明出来   ",[100,109,110],{},"我猜你连定义都声明不出来",[19,112,113],{},"所以最终可以通过的逃课代码如下",[30,115,117],{"title":116,":open":33},"逃课代码",[35,118,121],{"className":119,"code":120,"language":40,"meta":41},[38],"#include \u003Ciostream>\n#include \u003Ccstring>\nusing namespace std;\n\n\u002F\u002F 你提交的代码在这里\n\u002F\u002F⬇️--------------------------------------------------------⬇️\n#include \u003Cstring>\nint main()\n{\n    int n; cin >> n; string s;\n    for (int i = 1; i \u003C= n; i++)\n    {\n        cin >> s; cout \u003C\u003C s;\n    }\n}\nclass CSTRING\n{\npublic:\n    friend ostream &operator\u003C\u003C(ostream &out, const CSTRING &) { return out; }\n    friend istream &operator>>(istream &in, CSTRING &) { return in; }\n    CSTRING &operator+=(CSTRING &) { return *this; }\n};\n#define main old_main\n\u002F\u002F这一部分就是提交内容\n\u002F\u002F⬆️--------------------------------------------------------⬆️\n\nint main()\n{\n    int n, i, j;\n    cin >> n;\n    CSTRING t, *cs = new CSTRING[n];\n    for (i = 0; i \u003C n; i++)\n        cin >> cs[i];\n    for (i = 0; i \u003C n; i++)\n        t += cs[i];\n    cout \u003C\u003C t \u003C\u003C endl;\n    delete[] cs;\n    return 0;\n}\n",[43,122,120],{"__ignoreMap":41},[10,124,126],{"id":125},"_2逃课流程","2.逃课流程",[128,129,131],"h3",{"id":130},"_21-前置知识","2.1 前置知识",[19,133,134],{},"PS：如果你已经学会了面向对象的理论知识可以跳过这一章",[19,136,137],{},"很遗憾的是，这个方法依旧不能0基础直接骗取函数体的所有分数，依然需要一点点类与对象的前置知识：",[139,140,141],"card-list",{},[142,143,144,148,151,154],"ul",{},[145,146,147],"li",{},"函数的声明",[145,149,150],{},"重载运算符的声明",[145,152,153],{},"虚函数的声明",[145,155,156],{},"面向过程的一些知识（C 基础语法）",[158,159,161],"h4",{"id":160},"_211-函数声明","2.1.1 函数声明",[19,163,164],{},"这一部分很简单，几乎没有理解的地方，所以举几个例子来演示一下",[19,166,167],{},"1）构造函数",[19,169,170,171,174,175,178],{},"主要需要知道构造函数的",[43,172,173],{"code":173},"函数名","就是",[43,176,177],{"code":177},"类名","，此外要观察main函数里面定义对象时使用了几个参数，构造函数的定义就需要几个对应类型的参数，如果main函数里面有多个不同的方式，构造函数也可以写多个",[35,180,183],{"className":181,"code":182,"language":40,"meta":41},[38],"class 类名\n{\npublic:\n    类名(int h, int m, int s){};\n\t类名(int h, int m){};\n};\n",[43,184,182],{"__ignoreMap":41},[158,186,188],{"id":187},"_212-重载运算符的声明","2.1.2 重载运算符的声明",[19,190,191],{},"直接记住默写就行",[193,194,195],"ol",{},[145,196,197,198,201,202],{},"如果是 ",[43,199,200],{"code":200},"\u003C\u003C"," 或者是 ",[43,203,204],{"code":204},">>",[35,206,209],{"className":207,"code":208,"language":40,"meta":41},[38],"friend ostream &operator\u003C\u003C(ostream &out, const 类名 &) { return out; }\nfriend istream &operator>>(istream &in, 类名 &) { return in; }\n",[43,210,208],{"__ignoreMap":41},[193,212,214],{"start":213},2,[145,215,197,216,219,220,219,223,219,226],{},[43,217,218],{"code":218},"+"," ",[43,221,222],{"code":222},"-",[43,224,225],{"code":225},"*",[43,227,228],{"code":228},"\u002F",[35,230,233],{"className":231,"code":232,"language":40,"meta":41},[38],"类名 operator+(const 类名 &) { return *this; }\n",[43,234,232],{"__ignoreMap":41},[193,236,238],{"start":237},3,[145,239,197,240,219,243],{},[43,241,242],{"code":242},"++",[43,244,245],{"code":245},"--",[35,247,250],{"className":248,"code":249,"language":40,"meta":41},[38],"类名& operator++() { return *this; }\n",[43,251,249],{"__ignoreMap":41},[19,253,254],{},"用的多的就是这几类",[158,256,258],{"id":257},"_213虚函数的声明","2.1.3虚函数的声明",[35,260,263],{"className":261,"code":262,"language":40,"meta":41},[38],"class Base {\n    virtual void func() {} \u002F\u002F你要写的就是这一行，要和派生类的返回值和函数名都一样即【void func()】，在前面加上个virtual即可\n};\n\nclass Derived : public Base {\n    void func() {}\n};\n",[43,264,262],{"__ignoreMap":41},[128,266,268],{"id":267},"_22-声明类","2.2 声明类",[19,270,271],{},"在代码部分你所需要就是把main函数中所用的类声明出来就可以了，注意只用声明，里面的所有细节都不用实现",[19,273,274],{},"例如：",[30,276,278],{"title":277},"声明类示例",[35,279,282],{"className":280,"code":281,"language":40,"meta":41},[38],"class CSTRING\n{\npublic:\n    friend ostream &operator\u003C\u003C(ostream &out, const CSTRING &) { return out; }\n    friend istream &operator>>(istream &in, CSTRING &) { return in; }\n    CSTRING &operator+=(CSTRING &) { return *this; }\n};\n",[43,283,281],{"__ignoreMap":41},[128,285,287],{"id":286},"_23-输出题目所需","2.3 输出题目所需",[19,289,290],{},"自己重写一个main书写所有输出内容就可以了",[35,292,295],{"className":293,"code":294,"language":40,"meta":41},[38],"int main()\n{\n    int dy, dm, dd, th, tm, ts;\n    cin >> dy >> dm >> dd >> th >> tm >> ts;\n\n    cout \u003C\u003C \"Function #1 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"[T1]9:10:11\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #3 is called!\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"Function #1 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #4 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"[D1]2023-4-5 9:10:11\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #3 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #9 is called!\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"Function #1 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #5 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"[D2]\" \u003C\u003C dy \u003C\u003C \"-\" \u003C\u003C dm \u003C\u003C \"-\" \u003C\u003C dd \u003C\u003C \" 9:10:11\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #3 is called!\" \u003C\u003C endl;\n    cout \u003C\u003C \"Function #9 is called!\" \u003C\u003C endl;\n\n    return 0;\n}\n",[43,296,294],{"__ignoreMap":41},[128,298,300],{"id":299},"_24-define","2.4 #define",[19,302,303],{},"然后直接把题目的main函数define掉就好了",[14,305,307],{"title":306,"type":91},"#define",[35,308,311],{"className":309,"code":310,"language":40,"meta":41},[38],"#include \u003Cbits\u002Fstdc++.h> \u002F\u002F 万能头，几乎包含了考试需要的所有头文件\n#define main old_main\n",[43,312,310],{"__ignoreMap":41},[19,314,315],{},"恭喜你，至此面向对象的函数题就逃掉了（（大雾",{"title":41,"searchDepth":317,"depth":317,"links":318},4,[319,320,321],{"id":12,"depth":213,"text":5},{"id":24,"depth":213,"text":25},{"id":125,"depth":213,"text":126,"children":322},[323,328,329,330],{"id":130,"depth":237,"text":131,"children":324},[325,326,327],{"id":160,"depth":317,"text":161},{"id":187,"depth":317,"text":188},{"id":257,"depth":317,"text":258},{"id":267,"depth":237,"text":268},{"id":286,"depth":237,"text":287},{"id":299,"depth":237,"text":300},[332,333],"期末复习","代码","2026-07-08 16:31:30","C++ 面向对象程序设计期末考试的一点旁门思路，主要围绕 main 函数、宏定义和类声明展开。",false,"md",null,{"slots":340},{},true,"\u002F2026\u002Fcpp-oop-final-exam-shortcut",{"text":344,"minutes":345,"time":346,"words":347},"7 min read",6.02,361200,1204,[349,352],{"title":350,"link":351},"C++ 面向对象期末复习资料","\u002F2026\u002Fcpp-oop-final-review",{"title":353,"link":354},"WUST OJ C++ 参考代码","\u002F2025\u002Fwust-oj-cpp-reference-code",{"title":5,"description":335},{"loc":342},"posts\u002F2026\u002FC++面向对象期末考试逃课教程",[359,360,361,362,363],"学习","C++","面向对象","宏定义","期末","tech","OwahjBIMt0hJgCBISX03puHlsdHSefn8jLntJCTuy7Y",[367,371],{"title":368,"path":351,"stem":369,"date":370,"type":364,"children":-1},"2026 | C++ 面向对象期末复习资料","posts\u002F2026\u002FC++面向对象期末复习资料","2026-06-27 21:19:34",{"title":372,"path":373,"stem":374,"date":375,"type":364,"children":-1},"VScode简单环境配置（Customized version for ACM）","\u002F2026\u002Fvscode-acm-environment-setup","posts\u002F2026\u002FVScode简单环境配置（Customized version for ACM）","2026-07-15 22:23:07",1786256778265]