AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 19
struct
作为数据模型
C++ SELF
等级 19,
课时 0
我们讲解在 C++ 中为何将
struct
用作数据模型:如何将同一实体的字段用共同的类型绑定、通过
.
访问字段、使用聚合初始化
{
...
}
(以及字段顺序为何重要)、在声明中设置默认值(default member initializer)以及如何通过
const
T
&
将模型传入函数。最后我们会组装一个基于
std::vector
<
Task
>
的 TaskTracker 简易雏形,并讨论典型错误。
封闭值集合:enum 与 enum class
C++ SELF
等级 19,
课时 1
我们来分析为什么用
bool
、
int
或
std::string
来存储状态是个糟糕的主意,以及
enum class
如何解决“封闭值集合”问题。以
Task
模型为例添加状态和优先级,比较
enum
与
enum class
,讨论 underlying type(例如
std::uint8_t
)、通过
std::to_underlying
获取数值代码,以及常见错误和危险的转换例如
static_cast
。
switch 在 C++ 中:按值分支、break、fallthrough
C++ SELF
等级 19,
课时 2
解析 C++ 中的分支语句
switch
:它与
if
/
else
链有何不同,
case
和
default
标签如何工作,为什么很容易忘记写
break
,以及什么是 fallthrough(向下“落入”下一个
case
)。我们还会单独讨论限制(
switch
作用于整数/枚举类型)、
case
中的编译期常量、属性
[[
fallthrough
]]
,并为小项目 TaskTracker 基于
std::vector
和
enum class
搭建菜单骨架。
模型集合:std::vector<Model>
C++ SELF
等级 19,
课时 3
解析如何将单个模型变成 C++ 中可管理的集合:以
std
::
vector
<
Task
>
作为数据基础,并在其周围构建 CRUD 操作。实践中我们编写用于添加(
push_back()
)、读取(打印与按
id
查找)、更新(更改
status
、重命名)和删除(
erase()
)的函数,然后将所有操作连接为一个简单的 CLI 输入循环。单独讨论典型错误:
signed
/
unsigned
、在
size_t
中使用
-1
、删除后元素移动以及将
id
与索引混淆。
模型打印 — 统一的输出格式
C++ SELF
等级 19,
课时 4
解析如何在 C++ 中集中处理模型的打印,使得同一个对象(例如,
Task
)在所有场景下都以相同的方式输出。我们约定使用表格格式,通过
ToString
(
Status
)
将状态转换为字符串,实现打印行的函数
PrintTaskRow
和打印列表的函数
PrintTasks
,并讨论流格式化的陷阱(操纵符
std::left
/
std::right
和
std::setw
)。
Please enable JavaScript to continue using this application.