课程代码仓库初始化: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 运行通过。
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
# Auto-generated by tools/gen_part1.py — do not edit by hand.
|
||||
# 章节:p01/ch03
|
||||
add_executable(p1c03_mymodule extern_c_module_main.c)
|
||||
set_target_properties(p1c03_mymodule PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_mymodule PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_01 scope_resolution_operator.cpp)
|
||||
set_target_properties(p1c03_01 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_01 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_01 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_02 scope_resolution_operator_2.cpp)
|
||||
set_target_properties(p1c03_02 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_02 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_02 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_03 namespace_syntax.cpp)
|
||||
set_target_properties(p1c03_03 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_03 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_03 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_04 namespace_syntax_2.cpp)
|
||||
set_target_properties(p1c03_04 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_04 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_04 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_05 namespace_syntax_3.cpp)
|
||||
set_target_properties(p1c03_05 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_05 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_05 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_06 namespace_syntax_4.cpp)
|
||||
set_target_properties(p1c03_06 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_06 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_06 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_07 namespace_syntax_5.cpp)
|
||||
set_target_properties(p1c03_07 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_07 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_07 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_08 namespace_syntax_6.cpp)
|
||||
set_target_properties(p1c03_08 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_08 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_08 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_09 namespace_syntax_7.cpp)
|
||||
set_target_properties(p1c03_09 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_09 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_09 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_10 namespace_syntax_8.cpp)
|
||||
set_target_properties(p1c03_10 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_10 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_10 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_11 using_declaration.cpp)
|
||||
set_target_properties(p1c03_11 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_11 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_11 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_12 using_declaration_2.cpp)
|
||||
set_target_properties(p1c03_12 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_12 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_12 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_13 using_directive.cpp)
|
||||
set_target_properties(p1c03_13 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_13 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_13 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_14 global_variable_detection.c)
|
||||
set_target_properties(p1c03_14 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_14 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_15 strict_function_signatures.c)
|
||||
set_target_properties(p1c03_15 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_15 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_16 stricter_type_casting.c)
|
||||
set_target_properties(p1c03_16 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_16 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_17 struct_enhancement.cpp)
|
||||
set_target_properties(p1c03_17 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_17 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_17 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_18 bool_keyword.cpp)
|
||||
set_target_properties(p1c03_18 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_18 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_18 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_19 ternary_operator.c)
|
||||
set_target_properties(p1c03_19 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_19 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_20 ternary_operator.cpp)
|
||||
set_target_properties(p1c03_20 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_20 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_20 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_21 const_diff_summary.cpp)
|
||||
set_target_properties(p1c03_21 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_21 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_21 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_22 const_diff_summary.c)
|
||||
set_target_properties(p1c03_22 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_22 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_23 const_diff_summary_2.cpp)
|
||||
set_target_properties(p1c03_23 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_23 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_23 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_24 const_diff_summary_3.cpp)
|
||||
set_target_properties(p1c03_24 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_24 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_24 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_25 const_diff_summary_4.cpp)
|
||||
set_target_properties(p1c03_25 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_25 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_25 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_26 const_vs_define.cpp)
|
||||
set_target_properties(p1c03_26 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_26 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_26 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_27 const_vs_define_2.cpp)
|
||||
set_target_properties(p1c03_27 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_27 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_27 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_28 const_vs_define_3.cpp)
|
||||
set_target_properties(p1c03_28 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_28 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_28 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_29 reference_basics.cpp)
|
||||
set_target_properties(p1c03_29 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_29 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_29 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_30 reference_basics_2.cpp)
|
||||
set_target_properties(p1c03_30 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_30 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_30 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_31 reference_in_function.cpp)
|
||||
set_target_properties(p1c03_31 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_31 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_31 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_32 reference_in_function_2.cpp)
|
||||
set_target_properties(p1c03_32 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_32 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_32 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_33 reference_essence.cpp)
|
||||
set_target_properties(p1c03_33 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_33 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_33 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_34 pointer_reference.cpp)
|
||||
set_target_properties(p1c03_34 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_34 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_34 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_35 const_reference.cpp)
|
||||
set_target_properties(p1c03_35 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_35 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_35 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_36 const_reference_2.cpp)
|
||||
set_target_properties(p1c03_36 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_36 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_36 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_37 macro_pitfalls.cpp)
|
||||
set_target_properties(p1c03_37 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_37 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_37 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_38 macro_pitfalls_2.cpp)
|
||||
set_target_properties(p1c03_38 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_38 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_38 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_39 inline_in_class.cpp)
|
||||
set_target_properties(p1c03_39 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_39 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_39 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_40 default_arguments.cpp)
|
||||
set_target_properties(p1c03_40 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_40 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_40 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_41 placeholder_parameters.cpp)
|
||||
set_target_properties(p1c03_41 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_41 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_41 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_42 function_overload_basics.cpp)
|
||||
set_target_properties(p1c03_42 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_42 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_42 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_43 function_overload_basics_2.cpp)
|
||||
set_target_properties(p1c03_43 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_43 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_43 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_44 function_overload_mechanism.cpp)
|
||||
set_target_properties(p1c03_44 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_44 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_44 PRIVATE -Wall -Wextra)
|
||||
add_executable(p1c03_45 extern_c.cpp)
|
||||
set_target_properties(p1c03_45 PROPERTIES C_STANDARD 17 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
|
||||
set_target_properties(p1c03_45 PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF)
|
||||
target_compile_options(p1c03_45 PRIVATE -Wall -Wextra)
|
||||
add_custom_target(all_p01_ch03 DEPENDS p1c03_mymodule p1c03_01 p1c03_02 p1c03_03 p1c03_04 p1c03_05 p1c03_06 p1c03_07 p1c03_08 p1c03_09 p1c03_10 p1c03_11 p1c03_12 p1c03_13 p1c03_14 p1c03_15 p1c03_16 p1c03_17 p1c03_18 p1c03_19 p1c03_20 p1c03_21 p1c03_22 p1c03_23 p1c03_24 p1c03_25 p1c03_26 p1c03_27 p1c03_28 p1c03_29 p1c03_30 p1c03_31 p1c03_32 p1c03_33 p1c03_34 p1c03_35 p1c03_36 p1c03_37 p1c03_38 p1c03_39 p1c03_40 p1c03_41 p1c03_42 p1c03_43 p1c03_44 p1c03_45)
|
||||
@@ -0,0 +1,23 @@
|
||||
// ============================================================================
|
||||
// p1c03_18 — 3.7 “新增”bool类型关键字
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:17] 3.7 “新增”bool类型关键字 ---
|
||||
void test()
|
||||
{ cout << sizeof(false) << endl; //为1,//bool类型占一个字节大小
|
||||
bool flag = true; // c语言中没有这种类型
|
||||
flag = 100; //给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
// ============================================================================
|
||||
// p1c03_22 — 3.8.2.3 C/C++中const异同总结
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// --- 原文片段 [58954439:21] 3.8.2.3 C/C++中const异同总结 ---
|
||||
static void block_0() {
|
||||
const int constA = 10;
|
||||
|
||||
int* p = (int*)&constA;
|
||||
|
||||
*p = 300;
|
||||
|
||||
printf("constA:%d\n",constA);
|
||||
|
||||
printf("*p:%d\n", *p);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// ============================================================================
|
||||
// p1c03_21 — 3.8.2.3 C/C++中const异同总结
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:20] 3.8.2.3 C/C++中const异同总结 ---
|
||||
const int constA = 10;
|
||||
int main(){
|
||||
int* p = (int*)&constA;
|
||||
*p = 200;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,25 @@
|
||||
// ============================================================================
|
||||
// p1c03_23 — 3.8.2.3 C/C++中const异同总结
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:22] 3.8.2.3 C/C++中const异同总结 ---
|
||||
static void block_0() {
|
||||
const int constA = 10;
|
||||
int* p = (int*)&constA;
|
||||
*p = 300;
|
||||
cout << "constA:" << constA << endl;
|
||||
cout << "*p:" << *p << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// ============================================================================
|
||||
// p1c03_24 — 3.8.2.3 C/C++中const异同总结
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:23] 3.8.2.3 C/C++中const异同总结 ---
|
||||
static void block_0() {
|
||||
int b = 10;
|
||||
const int constA = b;
|
||||
int* p = (int*)&constA;
|
||||
*p = 300;
|
||||
cout << "constA:" << constA << endl;
|
||||
cout << "*p:" << *p << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// ============================================================================
|
||||
// p1c03_25 — 3.8.2.3 C/C++中const异同总结
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:24] 3.8.2.3 C/C++中const异同总结 ---
|
||||
static void block_0() {
|
||||
class Person { public: int age = 0; };
|
||||
const Person person; //未初始化age
|
||||
//person.age = 50; //不可修改
|
||||
Person* pPerson = (Person*)&person;
|
||||
//指针间接修改
|
||||
pPerson->age = 100;
|
||||
cout << "pPerson->age:" << pPerson->age << endl;
|
||||
pPerson->age = 200;
|
||||
cout << "pPerson->age:" << pPerson->age << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// ============================================================================
|
||||
// p1c03_35 — 3.10.5 常量引用
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:34] 3.10.5 常量引用 ---
|
||||
void test01(){
|
||||
int a = 100;
|
||||
const int& aRef = a; //此时aRef就是a
|
||||
//aRef = 200; 不能通过aRef的值
|
||||
a = 100; //OK
|
||||
cout << "a:" << a << endl;
|
||||
cout << "aRef:" << aRef << endl;
|
||||
}
|
||||
void test02(){
|
||||
//不能把一个字面量赋给引用
|
||||
//int& ref = 100;
|
||||
//但是可以把一个字面量赋给常引用
|
||||
const int& ref = 100; //int temp = 200; const int& ret = temp;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
// ============================================================================
|
||||
// p1c03_36 — 3.10.5 常量引用
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:35] 3.10.5 常量引用 ---
|
||||
//const int& param防止函数中意外修改数据
|
||||
void ShowVal(const int& param){
|
||||
cout << "param:" << param << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// ============================================================================
|
||||
// p1c03_26 — 3.9.3 尽量以const替换#define
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:25] 3.9.3 尽量以const替换#define ---
|
||||
#define PARAM 128
|
||||
|
||||
const short param = 128;
|
||||
|
||||
void func_1(short a){
|
||||
cout << "short!" << endl;
|
||||
}
|
||||
void func_1(int a){
|
||||
cout << "int" << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// ============================================================================
|
||||
// p1c03_27 — 3.9.3 尽量以const替换#define
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:26] 3.9.3 尽量以const替换#define ---
|
||||
void func1(){
|
||||
const int a = 10;
|
||||
#define A 20
|
||||
//#undef A //卸载宏常量A
|
||||
}
|
||||
|
||||
void func2(){
|
||||
//cout << "a:" << a << endl; //不可访问,超出了const int a作用域
|
||||
cout << "A:" << A << endl; //#define作用域从定义到文件结束或者到#undef,可访问
|
||||
}
|
||||
|
||||
int main(){
|
||||
func2();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,27 @@
|
||||
// ============================================================================
|
||||
// p1c03_28 — 3.9.3 尽量以const替换#define
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:27] 3.9.3 尽量以const替换#define ---
|
||||
namespace MySpace{
|
||||
#define num 1024
|
||||
}
|
||||
|
||||
void test(){
|
||||
//cout << MySpace::NUM << endl; //错误
|
||||
//int num = 100; //命名冲突
|
||||
cout << num << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
// ============================================================================
|
||||
// p1c03_40 — 3.12 函数的默认参数
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:39] 3.12 函数的默认参数 ---
|
||||
void TestFunc01(int a = 10, int b = 20){
|
||||
cout << "a + b = " << a + b << endl;
|
||||
}
|
||||
//注意点:
|
||||
//1. 形参b设置默认参数值,那么后面位置的形参c也需要设置默认参数
|
||||
void TestFunc02(int a,int b = 10,int c = 10){}
|
||||
//2. 如果函数声明和函数定义分开,函数声明设置了默认参数,函数定义不能再设置默认参数
|
||||
void TestFunc03(int a = 0,int b = 0);
|
||||
void TestFunc03(int a, int b){}
|
||||
|
||||
int main(){
|
||||
//1.如果没有传参数,那么使用默认参数
|
||||
TestFunc01();
|
||||
//2. 如果传一个参数,那么第二个参数使用默认参数
|
||||
TestFunc01(100);
|
||||
//3. 如果传入两个参数,那么两个参数都使用我们传入的参数
|
||||
TestFunc01(100, 200);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,48 @@
|
||||
// ============================================================================
|
||||
// p1c03_45 — 3.14.3 extern “C”浅析
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:46] 3.14.3 extern “C”浅析 ---
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
|
||||
#if 0
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#if 0
|
||||
void func1();
|
||||
int func2(int a, int b);
|
||||
#else
|
||||
#include"MyModule.h"
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
extern "C" void func1();
|
||||
extern "C" int func2(int a, int b);
|
||||
|
||||
#endif
|
||||
|
||||
int main(){
|
||||
func1();
|
||||
cout << func2(10, 20) << endl;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
// --- 为使本示例作为独立目标可链接,就地提供 func1/func2 的 extern "C" 定义 ---
|
||||
// (原文仅声明;定义在配对的 MyModule.c。此处补最小实现以自洽编译运行。)
|
||||
extern "C" void func1(){ printf("hello world!"); }
|
||||
extern "C" int func2(int a, int b){ return a + b; }
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,13 @@
|
||||
// 58954439:45 — MyModule 实现文件(与 my_module.h 配对)
|
||||
// 由 gen_part1.py 成对输出。
|
||||
|
||||
#include"my_module.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void func1(){
|
||||
printf("hello world!");
|
||||
}
|
||||
int func2(int a, int b){
|
||||
return a + b;
|
||||
}
|
||||
int main(){ func1(); printf("func2=%d\n", func2(3,4)); return EXIT_SUCCESS; }
|
||||
@@ -0,0 +1,37 @@
|
||||
// ============================================================================
|
||||
// p1c03_42 — 3.14.2.1 函数重载基本语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:41] 3.14.2.1 函数重载基本语法 ---
|
||||
namespace A{
|
||||
void MyFunc(){ cout << "无参数!" << endl; }
|
||||
void MyFunc(int a){ cout << "a: " << a << endl; }
|
||||
void MyFunc(string b){ cout << "b: " << b << endl; }
|
||||
void MyFunc(int a, string b){ cout << "a: " << a << " b:" << b << endl;}
|
||||
void MyFunc(string b, int a){ cout << "a: " << a << " b:" << b << endl;}
|
||||
}
|
||||
namespace B{
|
||||
void MyFunc(string b, int a){}
|
||||
//int MyFunc(string b, int a){} //无法重载仅按返回值区分的函数
|
||||
}
|
||||
void test(){
|
||||
A::MyFunc();
|
||||
A::MyFunc(10);
|
||||
A::MyFunc("hello");
|
||||
A::MyFunc(10, "world");
|
||||
A::MyFunc("world", 10);
|
||||
B::MyFunc("ok", 1);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// ============================================================================
|
||||
// p1c03_43 — 3.14.2.1 函数重载基本语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:42] 3.14.2.1 函数重载基本语法 ---
|
||||
void MyFunc(string b){
|
||||
cout << "b: " << b << endl;
|
||||
}
|
||||
//函数重载碰上默认参数
|
||||
void MyFunc(string b, int a = 10){
|
||||
cout << "a: " << a << " b:" << b << endl;
|
||||
}
|
||||
int main(){
|
||||
// MyFunc("hello"); // 二义:MyFunc(string) 与 MyFunc(string,int=10) 同等匹配
|
||||
// MyFunc(string("hello")); // 仍二义:强转 string 也无法区分两候选
|
||||
MyFunc("hello", 20); // 显式给第二参 → 明确选双参重载
|
||||
return 0;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,20 @@
|
||||
// ============================================================================
|
||||
// p1c03_44 — 3.14.2.2 函数重载实现原理
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:43] 3.14.2.2 函数重载实现原理 ---
|
||||
void func(){}
|
||||
void func(int x){}
|
||||
void func(int x,char y){}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// ============================================================================
|
||||
// p1c03_14 — 3.3 全局变量检测增强
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// --- 原文片段 [58954439:13] 3.3 全局变量检测增强 ---
|
||||
int a = 10; //赋值,当做定义
|
||||
int a; //没有赋值,当做声明
|
||||
|
||||
int main(){
|
||||
printf("a:%d\n",a);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,22 @@
|
||||
// ============================================================================
|
||||
// p1c03_39 — 3.11.3.2 类内部的内联函数
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:38] 3.11.3.2 类内部的内联函数 ---
|
||||
class Person{
|
||||
public:
|
||||
Person(){ cout << "构造函数!" << endl; }
|
||||
void PrintPerson(){ cout << "输出Person!" << endl; }
|
||||
};
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_37 — 3.11.2 预处理宏的缺陷
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:36] 3.11.2 预处理宏的缺陷 ---
|
||||
#define ADD(x,y) x+y
|
||||
inline int Add(int x,int y){
|
||||
return x + y;
|
||||
}
|
||||
void test(){
|
||||
int ret1 = ADD(10, 20) * 10; //希望的结果是300
|
||||
int ret2 = Add(10, 20) * 10; //希望结果也是300
|
||||
cout << "ret1:" << ret1 << endl; //210
|
||||
cout << "ret2:" << ret2 << endl; //300
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_38 — 3.11.2 预处理宏的缺陷
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:37] 3.11.2 预处理宏的缺陷 ---
|
||||
#define COMPARE(x,y) ((x) < (y) ? (x) : (y))
|
||||
int Compare(int x,int y){
|
||||
return x < y ? x : y;
|
||||
}
|
||||
void test02(){
|
||||
int a = 1;
|
||||
int b = 3;
|
||||
//cout << "COMPARE(++a, b):" << COMPARE(++a, b) << endl; // 3
|
||||
cout << "Compare(int x,int y):" << Compare(++a, b) << endl; //2
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef MYMODULE_H
|
||||
#define MYMODULE_H
|
||||
|
||||
#include<stdio.h>
|
||||
|
||||
#if __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
void func1();
|
||||
int func2(int a,int b);
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_03 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:2] 3.2.2命名空间使用语法 ---
|
||||
namespace A{
|
||||
int a = 10;
|
||||
}
|
||||
namespace B{
|
||||
int a = 20;
|
||||
}
|
||||
void test(){
|
||||
cout << "A::a : " << A::a << endl;
|
||||
cout << "B::a : " << B::a << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_04 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:3] 3.2.2命名空间使用语法 ---
|
||||
namespace A{
|
||||
int a = 10;
|
||||
}
|
||||
namespace B{
|
||||
int a = 20;
|
||||
}
|
||||
void test(){
|
||||
cout << "A::a : " << A::a << endl;
|
||||
cout << "B::a : " << B::a << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_05 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:4] 3.2.2命名空间使用语法 ---
|
||||
namespace A{
|
||||
int a = 10;
|
||||
namespace B{
|
||||
int a = 20;
|
||||
}
|
||||
}
|
||||
void test(){
|
||||
cout << "A::a : " << A::a << endl;
|
||||
cout << "A::B::a : " << A::B::a << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// ============================================================================
|
||||
// p1c03_06 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:5] 3.2.2命名空间使用语法 ---
|
||||
namespace A{
|
||||
int a = 10;
|
||||
}
|
||||
|
||||
namespace A{
|
||||
void func(){
|
||||
cout << "hello namespace!" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void test(){
|
||||
cout << "A::a : " << A::a << endl;
|
||||
A::func();
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
// ============================================================================
|
||||
// p1c03_07 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:6] 3.2.2命名空间使用语法 ---
|
||||
namespace MySpace{
|
||||
void func1();
|
||||
void func2(int param);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// ============================================================================
|
||||
// p1c03_08 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:7] 3.2.2命名空间使用语法 ---
|
||||
namespace MySpace{
|
||||
void func1();
|
||||
void func2(int param);
|
||||
}
|
||||
void MySpace::func1(){
|
||||
cout << "MySpace::func1" << endl;
|
||||
}
|
||||
void MySpace::func2(int param){
|
||||
cout << "MySpace::func2 : " << param << endl;
|
||||
}
|
||||
void test(){
|
||||
MySpace::func1();
|
||||
MySpace::func2(42);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// ============================================================================
|
||||
// p1c03_09 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:8] 3.2.2命名空间使用语法 ---
|
||||
namespace{
|
||||
int a = 10;
|
||||
void func(){ cout << "hello namespace" << endl; }
|
||||
}
|
||||
void test(){
|
||||
cout << "a : " << a << endl;
|
||||
func();
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
// ============================================================================
|
||||
// p1c03_10 — 3.2.2命名空间使用语法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:9] 3.2.2命名空间使用语法 ---
|
||||
namespace veryLongName{
|
||||
|
||||
int a = 10;
|
||||
void func(){ cout << "hello namespace" << endl; }
|
||||
}
|
||||
|
||||
void test(){
|
||||
namespace shortName = veryLongName;
|
||||
cout << "veryLongName::a : " << shortName::a << endl;
|
||||
veryLongName::func();
|
||||
shortName::func();
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// ============================================================================
|
||||
// p1c03_41 — 3.13 函数的占位参数
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:40] 3.13 函数的占位参数 ---
|
||||
void TestFunc01(int a,int b,int){
|
||||
//函数内部无法使用占位参数
|
||||
cout << "a + b = " << a + b << endl;
|
||||
}
|
||||
//占位参数也可以设置默认值
|
||||
void TestFunc02(int a, int b, int = 20){
|
||||
//函数内部依旧无法使用占位参数
|
||||
cout << "a + b = " << a + b << endl;
|
||||
}
|
||||
int main(){
|
||||
|
||||
//错误调用,占位参数也是参数,必须传参数
|
||||
//TestFunc01(10,20);
|
||||
//正确调用
|
||||
TestFunc01(10,20,30);
|
||||
//正确调用
|
||||
TestFunc02(10,20);
|
||||
//正确调用
|
||||
TestFunc02(10, 20, 30);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,41 @@
|
||||
// ============================================================================
|
||||
// p1c03_34 — 3.10.4 指针引用
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:33] 3.10.4 指针引用 ---
|
||||
struct Teacher{
|
||||
int mAge;
|
||||
};
|
||||
//指针间接修改teacher的年龄
|
||||
void AllocateAndInitByPointer(Teacher** teacher){
|
||||
*teacher = (Teacher*)malloc(sizeof(Teacher));
|
||||
(*teacher)->mAge = 200;
|
||||
}
|
||||
//引用修改teacher年龄
|
||||
void AllocateAndInitByReference(Teacher*& teacher){
|
||||
teacher->mAge = 300;
|
||||
}
|
||||
void test(){
|
||||
//创建Teacher
|
||||
Teacher* teacher = NULL;
|
||||
//指针间接赋值
|
||||
AllocateAndInitByPointer(&teacher);
|
||||
cout << "AllocateAndInitByPointer:" << teacher->mAge << endl;
|
||||
//引用赋值,将teacher本身传到ChangeAgeByReference函数中
|
||||
AllocateAndInitByReference(teacher);
|
||||
cout << "AllocateAndInitByReference:" << teacher->mAge << endl;
|
||||
free(teacher);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
// ============================================================================
|
||||
// p1c03_29 — 3.10.1 引用基本用法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:28] 3.10.1 引用基本用法 ---
|
||||
//1. 认识引用
|
||||
void test01(){
|
||||
|
||||
int a = 10;
|
||||
//给变量a取一个别名b
|
||||
int& b = a;
|
||||
cout << "a:" << a << endl;
|
||||
cout << "b:" << b << endl;
|
||||
cout << "------------" << endl;
|
||||
//操作b就相当于操作a本身
|
||||
b = 100;
|
||||
cout << "a:" << a << endl;
|
||||
cout << "b:" << b << endl;
|
||||
cout << "------------" << endl;
|
||||
//一个变量可以有n个别名
|
||||
int& c = a;
|
||||
c = 200;
|
||||
cout << "a:" << a << endl;
|
||||
cout << "b:" << b << endl;
|
||||
cout << "c:" << c << endl;
|
||||
cout << "------------" << endl;
|
||||
//a,b,c的地址都是相同的
|
||||
cout << "a:" << &a << endl;
|
||||
cout << "b:" << &b << endl;
|
||||
cout << "c:" << &c << endl;
|
||||
}
|
||||
//2. 使用引用注意事项
|
||||
void test02(){
|
||||
//1) 引用必须初始化
|
||||
//int& ref; //报错:必须初始化引用
|
||||
//2) 引用一旦初始化,不能改变引用
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
int& ref = a;
|
||||
ref = b; //不能改变引用
|
||||
//3) 不能对数组建立引用
|
||||
int arr[10];
|
||||
//int& ref3[10] = arr;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// ============================================================================
|
||||
// p1c03_30 — 3.10.1 引用基本用法
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:29] 3.10.1 引用基本用法 ---
|
||||
static void block_0() {
|
||||
//1. 建立数组引用方法一
|
||||
typedef int ArrRef[10];
|
||||
int arr[10];
|
||||
ArrRef& aRef = arr;
|
||||
for (int i = 0; i < 10;i ++){
|
||||
aRef[i] = i+1;
|
||||
}
|
||||
for (int i = 0; i < 10;i++){
|
||||
cout << arr[i] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
//2. 建立数组引用方法二
|
||||
int(&f)[10] = arr;
|
||||
for (int i = 0; i < 10; i++){
|
||||
f[i] = i+10;
|
||||
}
|
||||
for (int i = 0; i < 10; i++){
|
||||
cout << arr[i] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// ============================================================================
|
||||
// p1c03_33 — 3.10.3 引用的本质
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:32] 3.10.3 引用的本质 ---
|
||||
//发现是引用,转换为 int* const ref = &a;
|
||||
void testFunc(int& ref){
|
||||
ref = 100; // ref是引用,转换为*ref = 100
|
||||
}
|
||||
int main(){
|
||||
int a = 10;
|
||||
int& aRef = a; //自动转换为 int* const aRef = &a;这也能说明引用为什么必须初始化
|
||||
aRef = 20; //内部发现aRef是引用,自动帮我们转换为: *aRef = 20;
|
||||
cout << "a:" << a << endl;
|
||||
cout << "aRef:" << aRef << endl;
|
||||
testFunc(a);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,49 @@
|
||||
// ============================================================================
|
||||
// p1c03_31 — 3.10.2 函数中的引用
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:30] 3.10.2 函数中的引用 ---
|
||||
//值传递
|
||||
void ValueSwap(int m,int n){
|
||||
int temp = m;
|
||||
m = n;
|
||||
n = temp;
|
||||
}
|
||||
//地址传递
|
||||
void PointerSwap(int* m,int* n){
|
||||
int temp = *m;
|
||||
*m = *n;
|
||||
*n = temp;
|
||||
}
|
||||
//引用传递
|
||||
void ReferenceSwap(int& m,int& n){
|
||||
int temp = m;
|
||||
m = n;
|
||||
n = temp;
|
||||
}
|
||||
void test(){
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
//值传递
|
||||
ValueSwap(a, b);
|
||||
cout << "a:" << a << " b:" << b << endl;
|
||||
//地址传递
|
||||
PointerSwap(&a, &b);
|
||||
cout << "a:" << a << " b:" << b << endl;
|
||||
//引用传递
|
||||
ReferenceSwap(a, b);
|
||||
cout << "a:" << a << " b:" << b << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// ============================================================================
|
||||
// p1c03_32 — 3.10.2 函数中的引用
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:31] 3.10.2 函数中的引用 ---
|
||||
//返回局部变量引用
|
||||
int& TestFun01(){
|
||||
int a = 10; //局部变量
|
||||
return a;
|
||||
}
|
||||
//返回静态变量引用
|
||||
int& TestFunc02(){
|
||||
static int a = 20;
|
||||
cout << "static int a : " << a << endl;
|
||||
return a;
|
||||
}
|
||||
int main(){
|
||||
//不能返回局部变量的引用
|
||||
int& ret01 = TestFun01();
|
||||
//如果函数做左值,那么必须返回引用
|
||||
TestFunc02();
|
||||
TestFunc02() = 100;
|
||||
TestFunc02();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,26 @@
|
||||
// ============================================================================
|
||||
// p1c03_01 — 3.1 ::作用域运算符
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:0] 3.1 ::作用域运算符 ---
|
||||
//全局变量
|
||||
int a = 10;
|
||||
void test(){
|
||||
//局部变量
|
||||
int a = 20;
|
||||
//全局a被隐藏
|
||||
cout << "a:" << a << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_02 — 3.1 ::作用域运算符
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:1] 3.1 ::作用域运算符 ---
|
||||
//全局变量
|
||||
int a = 10;
|
||||
//1. 局部变量和全局变量同名
|
||||
void test(){
|
||||
int a = 20;
|
||||
//打印局部变量a
|
||||
cout << "局部变量a:" << a << endl;
|
||||
//打印全局变量a
|
||||
cout << "全局变量a:" << ::a << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
// ============================================================================
|
||||
// p1c03_15 — 3.4 C++中所有的变量和函数都必须有类型
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// --- 原文片段 [58954439:14] 3.4 C++中所有的变量和函数都必须有类型 ---
|
||||
//i没有写类型,可以是任意类型
|
||||
int fun1(int i){
|
||||
printf("%d\n", i);
|
||||
return 0;
|
||||
}
|
||||
//i没有写类型,可以是任意类型
|
||||
int fun2(char* i){
|
||||
printf("%s\n", i);
|
||||
return 0;
|
||||
}
|
||||
//没有写参数,代表可以传任何类型的实参
|
||||
int fun3(void){
|
||||
printf("fun33333333333333333\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//C语言,如果函数没有参数,建议写void,代表没有参数
|
||||
int fun4(void){
|
||||
printf("fun4444444444444\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int g(void){
|
||||
return 10;
|
||||
}
|
||||
|
||||
int main(){
|
||||
|
||||
fun1(10);
|
||||
fun2("abc");
|
||||
fun3(); // 注意:C89 中 fun3() 可接受任意参数;C17 下 fun3(void) 不接受参数
|
||||
printf("g = %d\n", g());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,23 @@
|
||||
// ============================================================================
|
||||
// p1c03_16 — 3.5 更严格的类型转换
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// --- 原文片段 [58954439:15] 3.5 更严格的类型转换 ---
|
||||
typedef enum COLOR{ GREEN, RED, YELLOW } color;
|
||||
int main(){
|
||||
color mycolor = GREEN;
|
||||
mycolor = 10;
|
||||
printf("mycolor:%d\n", mycolor);
|
||||
char* p = malloc(10);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
@@ -0,0 +1,36 @@
|
||||
// ============================================================================
|
||||
// p1c03_17 — 3.6 struct类型加强
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:16] 3.6 struct类型加强 ---
|
||||
//1. 结构体中即可以定义成员变量,也可以定义成员函数
|
||||
struct Student{
|
||||
string mName;
|
||||
int mAge;
|
||||
void setName(string name){ mName = name; }
|
||||
void setAge(int age){ mAge = age; }
|
||||
void showStudent(){
|
||||
cout << "Name:" << mName << " Age:" << mAge << endl;
|
||||
}
|
||||
};
|
||||
|
||||
//2. c++中定义结构体变量不需要加struct关键字
|
||||
void test01(){
|
||||
Student student;
|
||||
student.setName("John");
|
||||
student.setAge(20);
|
||||
student.showStudent();
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test01();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ============================================================================
|
||||
// p1c03_19 — 3.8 三目运算符功能增强
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// --- 原文片段 [58954439:18] 3.8 三目运算符功能增强 ---
|
||||
static void block_0() {
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
printf("ret:%d\n", a > b ? a : b);
|
||||
//思考一个问题,(a > b ? a : b) 三目运算表达式返回的是什么?
|
||||
|
||||
//(a > b ? a : b) = 100;
|
||||
//返回的是右值
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// ============================================================================
|
||||
// p1c03_20 — 3.8 三目运算符功能增强
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:19] 3.8 三目运算符功能增强 ---
|
||||
static void block_0() {
|
||||
int a = 10;
|
||||
int b = 20;
|
||||
printf("ret:%d\n", a > b ? a : b);
|
||||
//思考一个问题,(a > b ? a : b) 三目运算表达式返回的是什么?
|
||||
|
||||
cout << "b:" << b << endl;
|
||||
//返回的是左值,变量的引用
|
||||
(a > b ? a : b) = 100;//返回的是左值,变量的引用
|
||||
cout << "b:" << b << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
block_0();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
// ============================================================================
|
||||
// p1c03_11 — 3.2.3 using声明
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:10] 3.2.3 using声明 ---
|
||||
namespace A{
|
||||
int paramA = 20;
|
||||
int paramB = 30;
|
||||
void funcA(){ cout << "hello funcA" << endl; }
|
||||
void funcB(){ cout << "hello funcA" << endl; }
|
||||
}
|
||||
|
||||
void test(){
|
||||
//1. 通过命名空间域运算符
|
||||
cout << A::paramA << endl;
|
||||
A::funcA();
|
||||
//2. using声明
|
||||
using A::paramA;
|
||||
using A::funcA;
|
||||
cout << paramA << endl;
|
||||
//cout << paramB << endl; //不可直接访问
|
||||
funcA();
|
||||
//3. 同名冲突
|
||||
//int paramA = 20; //相同作用域注意同名冲突
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// ============================================================================
|
||||
// p1c03_12 — 3.2.3 using声明
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:11] 3.2.3 using声明 ---
|
||||
namespace A{
|
||||
void func(){}
|
||||
void func(int x){}
|
||||
int func(int x,int y){}
|
||||
}
|
||||
void test(){
|
||||
using A::func;
|
||||
func();
|
||||
func(10);
|
||||
func(10, 20);
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// ============================================================================
|
||||
// p1c03_13 — 3.2.4 using编译指令
|
||||
// 来源:川大 C++/LinuxC wiki「02.Qt方向」
|
||||
// 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
|
||||
// // --- 原文片段 [pageId:blockIdx] --- 标注出处。
|
||||
// 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。
|
||||
// ============================================================================
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// --- 原文片段 [58954439:12] 3.2.4 using编译指令 ---
|
||||
namespace A{
|
||||
int paramA = 20;
|
||||
int paramB = 30;
|
||||
void funcA(){ cout << "hello funcA" << endl; }
|
||||
void funcB(){ cout << "hello funcB" << endl; }
|
||||
}
|
||||
|
||||
void test01(){
|
||||
using namespace A;
|
||||
cout << paramA << endl;
|
||||
cout << paramB << endl;
|
||||
funcA();
|
||||
funcB();
|
||||
|
||||
//不会产生二义性
|
||||
int paramA = 30;
|
||||
cout << paramA << endl;
|
||||
}
|
||||
|
||||
namespace B{
|
||||
int paramA = 20;
|
||||
int paramB = 30;
|
||||
void funcA(){ cout << "hello funcA" << endl; }
|
||||
void funcB(){ cout << "hello funcB" << endl; }
|
||||
}
|
||||
|
||||
void test02(){
|
||||
using namespace A;
|
||||
using namespace B;
|
||||
//二义性产生,不知道调用A还是B的paramA
|
||||
//cout << paramA << endl;
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
int main() {
|
||||
test01();
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user