Files
scuc-qt-course/tools/wiki_data/bodies/58954449.json
T
张宗平 13b3ebbe14 课程代码仓库初始化:Part1 (144) + Part3 (29) 全量生成与验证
把川大 wiki「02.Qt方向」课程代码整理为 CMake 管理的可编译运行项目。

Part1 C/C++ 强化 (p01/, 144 目标, host gcc/g++ 构建, 全绿):
- 修复全部编译失败:补 <cstring>/<fstream>/<iomanip>/<vector> 等缺失头
  (common_fix + infer_stl_includes 自动检测注入)、修正 pause() 壳注入
  (改检测已转换后的 pause 调用)、namespace 提升出函数体、const 成员函数
  正确性、dedupe 不再破坏函数重载集、K&R 隐式 int / 动态异常规范等
  C++17 移除特性的可编译等价改写。
- 目录采用深缩写 p01/ch04/s03/ (原 part1_cpp/ch04_class_object/03_ctor_dtor)。

Part3 Qt 桌面 (p03/, 29 目标, 隔离 Qt 5.14.2 构建, 全绿):
- gen_part3.py: Qt 外壳模板 (main+QApplication+show, QTimer 自动退出便于
  offscreen 验证)、AUTOMOC + .moc include、rewrite_* 处理散文混入/重载/
  资源依赖、生成占位 png/gif + .qrc + rundata 样例数据。
- 修正 QLable 笔误、全角分号、.→->、Windows 路径、QApplication 阻塞事件
  循环改为 QCoreApplication 等。

任务1 概念/版本验证:
- tools/std_probe.py: 跨 -std= 编译探针 (--pedantic-errors 让已废除特性硬失败)。
- tools/demo_versions/: K&R 隐式 int、三目左值、void* 转换、enum 赋整、
  const 经指针、动态异常规范 共 6 个跨版本演示。
- docs/VERSION_NOTES.md: 每条「原文说法→C17/C++17 是否成立→何版本成立→已验证」。

文档: 顶层 README、docs/SOURCE_PAGES.md (页面→目录映射)、
docs/ERRATA.md (Part1 修正)、docs/ERRATA_part3.md (Part3 修正)。
另修复 tools/run.sh / run_qt.sh 的 ${1:?...} 引号语法 bug。

隔离 Qt 验证: ldd 0 系统 Qt 引用; 173/173 目标全绿; p03 offscreen 运行通过。
2026-06-30 14:16:55 +08:00

1 line
5.8 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"id":"58954449","type":"page","status":"current","title":"02.面向对象程序设计案例","version":{"by":{"type":"known","username":"ethanliu","userKey":"2c90931b6cfb654f016d5c69becc0001","profilePicture":{"path":"/images/icons/profilepics/default.svg","width":48,"height":48,"isDefault":true},"displayName":"刘浩","_links":{"self":"https://wiki.suncaper.net/rest/api/user?key=2c90931b6cfb654f016d5c69becc0001"},"_expandable":{"status":""}},"when":"2022-07-09T01:51:24.000Z","message":"","number":1,"minorEdit":false,"hidden":false,"_links":{"self":"https://wiki.suncaper.net/rest/experimental/content/58954449/version/1"},"_expandable":{"content":"/rest/api/content/58954449"}},"body":{"storage":{"value":"<ac:layout><ac:layout-section ac:type=\"two_right_sidebar\"><ac:layout-cell><h2><span>4.2 </span>面向对象程序设计案例</h2><h3><span>4.2.1 </span>设计立方体类</h3><p>设计立方体类<span>(Cube)</span>,求出立方体的面积<span>( 2*a*b + 2*a*c + 2*b*c )</span>和体积<span>( a * b * c)</span>,分别用全局函数和成员函数判断两个立方体是否相等。</p><p><ac:image ac:thumbnail=\"true\" ac:height=\"173\"><ri:attachment ri:filename=\"image2021-5-8_12-15-49.png\" /></ac:image></p><ac:structured-macro ac:name=\"code\" ac:schema-version=\"1\" ac:macro-id=\"11ce75f3-ecf9-4ac8-81f3-ff85cd89a18a\"><ac:parameter ac:name=\"language\">cpp</ac:parameter><ac:plain-text-body><![CDATA[//立方体类\nclass Cub{\npublic:\n\tvoid setL(int l){ mL = l; }\n\tvoid setW(int w){ mW = w; }\n\tvoid setH(int h){ mH = h; }\n\tint getL(){ return mL; }\n\tint getW(){ return mW; }\n\tint getH(){ return mH; }\n\t//立方体面积\n\tint caculateS(){ return (mL*mW + mL*mH + mW*mH) * 2; }\n\t//立方体体积\n\tint caculateV(){ return mL * mW * mH; }\n\t//成员方法\n\tbool CubCompare(Cub& c){\n\t\tif (getL() == c.getL() && getW() == c.getW() && getH() == c.getH()){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\nprivate:\n\tint mL; //长\n\tint mW; //宽\n\tint mH; //高\n};\n\n//比较两个立方体是否相等\nbool CubCompare(Cub& c1, Cub& c2){\n\tif (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nvoid test(){\n\tCub c1, c2;\n\tc1.setL(10);\n\tc1.setW(20);\n\tc1.setH(30);\n\n\tc2.setL(20);\n\tc2.setW(20);\n\tc2.setH(30);\n\n\tcout << \"c1面积:\" << c1.caculateS() << \" 体积:\" << c1.caculateV() << endl;\n\tcout << \"c2面积:\" << c2.caculateS() << \" 体积:\" << c2.caculateV() << endl;\n\n\t//比较两个立方体是否相等\n\tif (CubCompare(c1, c2)){\n\t\tcout << \"c1和c2相等!\" << endl;\n\t}\n\telse{\n\t\tcout << \"c1和c2不相等!\" << endl;\n\t}\n\n\tif (c1.CubCompare(c2)){\n\t\tcout << \"c1和c2相等!\" << endl;\n\t}\n\telse{\n\t\tcout << \"c1和c2不相等!\" << endl;\n\t}\n}]]></ac:plain-text-body></ac:structured-macro><h3><span>4.2.2 </span>点和圆的关系</h3><p>设计一个圆形类(<span>AdvCircle</span>),和一个点类(<span>Point</span>),计算点和圆的关系。</p><p>假如圆心坐标为<span>x0, y0, </span>半径为<span>r</span>,点的坐标为<span>x1, y1</span></p><ul><li>点在圆上:<span>(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) == r*r</span></li><li>点在圆内:<span>(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) &lt; r*r</span></li><li>点在圆外:<span>(x1-x0)*(x1-x0) + (y1-y0)*(y1-y0) &gt; r*r</span></li></ul><p><br /></p><p><br /></p><p><br /></p><ac:structured-macro ac:name=\"code\" ac:schema-version=\"1\" ac:macro-id=\"95bffcf0-35cb-470f-8f4f-ade7b35989ef\"><ac:parameter ac:name=\"language\">cpp</ac:parameter><ac:plain-text-body><![CDATA[//点类\nclass Point{\npublic:\n\tvoid setX(int x){ mX = x; }\n\tvoid setY(int y){ mY = y; }\n\tint getX(){ return mX; }\n\tint getY(){ return mY; }\nprivate:\n\tint mX;\n\tint mY;\n};\n\n//圆类\nclass Circle{\npublic:\n\tvoid setP(int x,int y){\n\t\tmP.setX(x);\n\t\tmP.setY(y);\n\t}\n\tvoid setR(int r){ mR = r; }\n\tPoint& getP(){ return mP; }\n\tint getR(){ return mR; }\n\t//判断点和圆的关系\n\tvoid IsPointInCircle(Point& point){\n\t\tint distance = (point.getX() - mP.getX()) * (point.getX() - mP.getX()) + (point.getY() - mP.getY()) * (point.getY() - mP.getY());\n\t\tint radius = mR * mR;\n\t\tif (distance < radius){\n\t\t\tcout << \"Point(\" << point.getX() << \",\" << point.getY() << \")在圆内!\" << endl;\n\t\t}\n\t\telse if (distance > radius){\n\t\t\tcout << \"Point(\" << point.getX() << \",\" << point.getY() << \")在圆外!\" << endl;\n\t\t}\n\t\telse{\n\t\t\tcout << \"Point(\" << point.getX() << \",\" << point.getY() << \")在圆上!\" << endl;\n\t\t}\n\t}\nprivate:\n\tPoint mP; //圆心\n\tint mR; //半径\n};\n\nvoid test(){\n\t//实例化圆对象\n\tCircle circle;\n\tcircle.setP(20, 20);\n\tcircle.setR(5);\n\t//实例化点对象\n\tPoint point;\n\tpoint.setX(25);\n\tpoint.setY(20);\n\n\tcircle.IsPointInCircle(point);\n}]]></ac:plain-text-body></ac:structured-macro></ac:layout-cell><ac:layout-cell><p><br /></p></ac:layout-cell></ac:layout-section></ac:layout>","representation":"storage","_expandable":{"content":"/rest/api/content/58954449"}},"_expandable":{"editor":"","view":"","export_view":"","styled_view":"","anonymous_export_view":""}},"extensions":{"position":"none"},"_links":{"webui":"/pages/viewpage.action?pageId=58954449","edit":"/pages/resumedraft.action?draftId=58954449","tinyui":"/x/0ZKDAw","collection":"/rest/api/content","base":"https://wiki.suncaper.net","context":"","self":"https://wiki.suncaper.net/rest/api/content/58954449"},"_expandable":{"container":"/rest/api/space/2CT","metadata":"","operations":"","children":"/rest/api/content/58954449/child","restrictions":"/rest/api/content/58954449/restriction/byOperation","history":"/rest/api/content/58954449/history","ancestors":"","descendants":"/rest/api/content/58954449/descendant","space":"/rest/api/space/2CT"}}