Content
35 Lessons • 0 Quizzes • 0 Challenges
简介
- 1
预期内容
生命周期、空值和 is 操作符
- 1
生命周期
- 2
基本操作
- 3
空值与 is 操作符
- 4
赋值为 null 值
- 5
摘要
- 6
关于生命周期、空值和 is 操作符的测验
类型转换
- 1
自动类型转换
- 2
算术运算和切片转换
- 3
const、enum、immutable 和 bool 类型转换
- 4
显式类型转换
- 5
总结
- 6
类型转换测验
结构体
- 1
结构体(Structs)的定义
- 2
构造
- 3
复制和赋值
- 4
结构体字面量和静态成员
- 5
挑战:来玩扑克牌
- 6
解决方案:来玩扑克牌
- 7
结构体测验
可变数量的参数
- 1
默认参数
- 2
特殊关键字作为默认参数
- 3
可变参数函数
- 4
可变参数函数的生命周期
- 5
挑战:执行计算
- 6
解决方案:执行计算
- 7
关于默认参数和可变参数函数的测验
函数重载与成员函数
- 1
函数重载与重载解析
- 2
用户定义类型的函数重载
- 3
挑战:重载函数
- 4
解决方案:重载函数
- 5
成员函数
- 6
成员函数示例
- 7
const ref 参数
- 8
const 和 inout 成员函数
- 9
函数重载与成员函数测验
构造函数和其他特殊函数
- 1
构造函数:简介
- 2
编译器生成的构造函数
- 3
用户定义的构造函数与 static opCall() 的使用
- 4
构造函数限定符
- 5
不可变性与类型转换
- 6
析构函数
- 7
拷贝构造
- 8
赋值运算符
- 9
总结
- 10
构造函数测验
操作符重载
- 1
学习操作符重载
- 2
可重载的运算符
- 3
元素索引与切片操作符
- 4
定义多个操作符
- 5
操作符的返回类型
- 6
opEquals()
- 7
opCmp()
- 8
opCall()
- 9
索引运算符
- 10
切片操作符
- 11
opCast()
- 12
opDispatch() 和 opBinaryRight()
- 13
挑战:让单元测试通过
- 14
解决方案:让单元测试通过
- 15
关于操作符重载的测验
类简介
- 1
与结构体的比较
- 2
复制和赋值
- 3
定义、构造与析构
- 4
成员访问与成员函数
- 5
is 和 !is 运算符
- 6
摘要
- 7
类的测验
继承
- 1
简介
- 2
继承层次结构
- 3
父类成员
- 4
重写成员函数的定义
- 5
使用子类替换父类
- 6
抽象成员函数和抽象类
- 7
示例
- 8
挑战:实现继承层次结构
- 9
解决方案:实现继承层次结构
- 10
总结
- 11
继承测验
对象类
- 1
typeid 和 TypeInfo
- 2
toString 和 opEquals
- 3
opCmp
- 4
toHash
- 5
挑战:为一个类实现 opEquals 函数
- 6
解决方案:为类实现 opEquals 函数
- 7
对象测验
接口
- 1
接口继承
- 2
静态成员函数
- 3
最终成员函数
- 4
抽象
- 5
示例
- 6
总结
- 7
接口测验
销毁和作用域
- 1
destroy()
- 2
destroy() 示例
- 3
作用域函数
- 4
关于 destroy() 和 scoped() 的测验
模块和库
- 1
模块
- 2
导入模块
- 3
库
- 4
模块与库测验
封装与保护属性
- 1
封装
- 2
保护属性
- 3
模块导入与封装的使用
- 4
D语言中的封装示例
- 5
关于封装与保护属性的测验
UFCS、属性与契约编程
- 1
通用函数调用语法
- 2
属性
- 3
属性函数
- 4
属性的使用
- 5
前置条件和后置条件
- 6
不变块
- 7
合约继承
- 8
关于 UFCS、属性和契约编程的测验
模板
- 1
简介
- 2
函数模板
- 3
类型推导与显式类型指定
- 4
模板实例化与模板特化
- 5
结构体和类模板
- 6
默认模板参数与模板实例化
- 7
类模板示例
- 8
函数模板示例
- 9
模板测验
指令、别名和 with
- 1
pragma(msg) 和 pragma(lib)
- 2
pragma(inline)
- 3
pragma(startaddress) 和 pragma(mangle)
- 4
别名:缩短长名称
- 5
别名:设计灵活性
- 6
别名:揭示父类的隐藏名称
- 7
别名 this
- 8
with
- 9
关于 Pragmas、别名和 with 的测验
指针
- 1
引用的概念
- 2
语法
- 3
指针值与地址运算符 &
- 4
访问操作符与点操作符
- 5
修改指针的值
- 6
指针与数组的使用
- 7
void* 指针与逻辑表达式中的指针
- 8
指针与 new、.ptr 和 in 操作符的使用
- 9
何时使用指针
- 10
示例:一个简单的链表
- 11
示例:通过 ubyte* 观察内存内容
- 12
挑战:交换数字
- 13
解决方案:交换数字
- 14
指针测验
位运算
- 1
数据在最低层次的表示
- 2
二进制数制
- 3
十六进制数制
- 4
位运算
- 5
语义
- 6
常见用途
- 7
挑战:将IPv4地址转换为其点分十进制形式
- 8
解决方案:将IPv4地址转换为其点分十进制形式
- 9
挑战:将四个八位数值转换为对应的32位值
- 10
解决方案:将四个八位组数值转换为相应的32位值
- 11
挑战:创建指定宽度的掩码
- 12
解决方案:创建指定宽度的掩码
- 13
位运算测验
条件编译
- 1
简介
- 2
调试
- 3
版本(标签)和版本(级别)
- 4
static_if、static_assert 和类型特性
- 5
is 表达式
- 6
is (T == Specifier)
- 7
is (T 标识符 == 指定符)
- 8
is (/* ... */ 说明符, 模板参数列表)
- 9
条件编译测验
函数指针、委托和lambda表达式
- 1
函数指针
- 2
函数指针作为参数和成员
- 3
匿名函数
- 4
委托
- 5
委托属性、延迟参数与延迟可变参数函数
- 6
`toString()` 带有委托参数
- 7
章节总结
- 8
函数指针、委托和Lambda表达式的测验
使用 foreach 遍历结构体和类
- 1
foreach 对范围成员函数的支持
- 2
opApply 和 opApplyReverse 成员函数
- 3
循环计数器
- 4
挑战:设计一个 NumberRange 结构体
- 5
解决方案:设计一个 NumberRange 结构体
- 6
嵌套函数、结构体和类
- 7
关于使用 foreach 遍历结构体和类的测验
联合体、标签、goto 语句和元组
- 1
联合体
- 2
匿名联合体与访问其他成员
- 3
联合体示例
- 4
标签和 goto
- 5
元组:tuple()
- 6
元组:AliasSeq
- 7
元组:.tupleof 属性
- 8
关于联合体、标签、goto 语句和元组的测验
更多模板
- 1
快捷语法
- 2
模板的类型
- 3
模板参数:类型与值
- 4
模板参数:this 和别名
- 5
模板参数:元组
- 6
typeof 的几种形式
- 7
模板特化与元编程
- 8
编译时多态与代码膨胀
- 9
模板约束
- 10
命名模板约束
- 11
使用模板进行多维运算符重载
- 12
多维操作符重载示例
- 13
摘要
- 14
模板测验
更多函数
- 1
返回类型属性:auto 和 ref
- 2
返回类型属性:auto ref 和 inout
- 3
行为属性:纯函数
- 4
行为属性:nothrow 和 @nogc
- 5
代码安全属性
- 6
编译时函数执行(CTFE)
- 7
总结
- 8
函数测验
混入(Mixins)
- 1
模板混入
- 2
字符串混入
- 3
混入命名空间
- 4
运算符重载与析构函数中的混入(Mixins)
- 5
导入文本文件
- 6
示例
- 7
混入(Mixins)测验
范围
- 1
简介与历史
- 2
D语言中的范围使用
- 3
范围层次结构与迭代
- 4
输入范围
- 5
使用切片作为范围
- 6
字符串解码为 dchar 范围
- 7
没有实际元素的范围
- 8
无限范围及返回范围的函数
- 9
std.range 和 std.algorithm 模块
- 10
ForwardRange 和 BidirectionalRange
- 11
RandomAccessRange:无限
- 12
RandomAccessRange:有限
- 13
输出范围
- 14
使用切片作为输出范围
- 15
范围类型模板
- 16
元素类型和其他范围模板
- 17
运行时多态性与范围
- 18
摘要
- 19
范围测验
静态foreach与并行处理
- 1
static foreach
- 2
并行性
- 3
taskPool.parallel()
- 4
任务
- 5
异常捕获与 Task 的成员函数
- 6
taskPool.asyncBuf()
- 7
taskPool.map() 和 taskPool.amap()
- 8
taskPool.reduce()
- 9
使用多个函数和任务池的元组结果
- 10
总结
- 11
关于静态 foreach 和并行性的测验
消息传递并发
- 1
概念
- 2
启动线程
- 3
线程标识符
- 4
消息传递
- 5
消息传递:示例
- 6
期望接收不同类型的消息
- 7
工作进程执行过程中的异常
- 8
检测线程终止
- 9
邮箱管理
- 10
优先级消息和线程名称
- 11
总结
- 12
并发中的消息传递测验
数据共享并发
- 1
在线程之间共享数据
- 2
竞态条件示例
- 3
使用 synchronized 避免竞态条件
- 4
static this() 和原子操作
- 5
总结
- 6
数据共享并发性测验
纤维
- 1
调用栈
- 2
使用方法
- 3
范围实现中的纤维
- 4
将协程呈现为范围
- 5
异步输入输出中的纤程
- 6
异常和协程
- 7
协作式多任务处理
- 8
总结
- 9
关于纤维的测验
内存管理
- 1
内存
- 2
垃圾回收器
- 3
分配内存
- 4
内存块属性
- 5
对齐:.alignof 属性
- 6
对齐:.offsetof 属性
- 7
在特定内存位置构造变量
- 8
对象的构造与析构
- 9
摘要
- 10
内存管理测验
用户定义属性(UDA)和运算符优先级
- 1
用户自定义属性(UDA)
- 2
UDA 示例
- 3
UDA的优势
- 4
运算符优先级
- 5
关于UDA和运算符优先级的测验
结论
- 1
总结!
Certificate of Completion
Showcase your accomplishment by sharing your certificate of completion.
Course Author:Anonymous User