AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 48
struct vs class: 封装与默认访问权限
C++ SELF
等级 48,
课时 0
解析 C++ 中
struct
与
class
之间的关键(也是唯一本质的)区别:默认访问权限(
public
vs
private
)以及它如何影响封装。通过
Account
和
Task
两个例子展示为什么要通过方法隐藏状态、如何形成类型的“契约”,以及初学者最常见的错误(忘记写
public
:
、相信“魔法差异”以及在
}
之后漏写
;
)。
`private`/`public`: 最小化接口
C++ SELF
等级 48,
课时 1
我们来解析为什么在 C++ 中需要
public
/
private
段,封装如何让对象“不可被随意破坏”,以及为什么最好把
public
API 保持得很小。以迷你项目
TaskTracker
为例,演示如何把状态(例如
std::vector
)隐藏在有意义的方法后面(
rename()
,
mark_done()
),不要通过返回引用
T
&
泄露出来,并且把校验逻辑放在类内部。
Getter/Setter:什么时候需要,什么时候有害于设计
C++ SELF
等级 48,
课时 2
解析为什么“
getName
()
/
setName
()
对每个字段都写”在 C++ 中经常把 API 变成噪音,getter 如何通过
const
T
&
(尤其是
T
&
)泄漏,以及如何用操作方法(
rename
,
mark_done
,
reopen
)替代 setter 来支持不变量,示例为迷你应用
TaskTracker
。
初始化列表:这是正确性问题,不只是风格
C++ SELF
等级 48,
课时 3
我们来拆解一下,为什么 C++ 构造函数中的初始化列表并不只是“好看的语法”,而是对象创建正确模型的一部分:字段和基类部分会在构造函数体执行之前完成初始化。我们会比较初始化与赋值,看到哪些场景是必须使用初始化列表的(
const
字段和引用),学习如何让对象从“出生”起就满足不变式,并且学会如何把初始化列表与
default member initializer
谨慎地结合使用。最后还会给出一份速查清单和常见错误。
explicit
— 在 API 中防止隐式转换
C++ SELF
等级 48,
课时 4
我们来分析一下,为什么 C++ 中的单参数构造函数会在不知不觉中创建临时对象并导致“奇怪”的函数调用,关键字
explicit
如何禁止隐式转换,
copy-initialization
与
direct/list-initialization
有何不同,为什么默认参数会把构造函数变成“几乎单参数”的,以及如何在像
TaskId
和
Minutes
这样的强类型上使用
explicit
来保护您 API 的语义。
Please enable JavaScript to continue using this application.