23用d编程--类
类,
oop:封装,继承,多态.类是引用
类型.未初化时为空针
,初化后变成实体
.实际类必须由新
构造.
而引用
与无效
比较是错误的,所以不能这样.必须用is
比较.
MyClass referencesAnObject = new MyClass;
assert(referencesAnObject !is null);
MyClass variable; // 空针
assert(variable is null);
因为==
要查询对象成员值,而如果是空针
,则会出错.
类,同样也是钥匙
与实体
的关系.要重新复制要用.dup
class Foo {
S o; // 假定S是构类型
char[] s;
int i;
// ...
this(S o, const char[] s, int i) {
this.o = o;
this.s = s.dup;
this.i = i;
}
Foo dup() const {
return new Foo(o, s, i);
}
}
auto var1 = new Foo(S(1.5), "你好", 42);
auto var2 = var1.dup();//新实体
//----
class Foo {
// ...
immutable(Foo) idup() const {
return new immutable(Foo)(o, s, i);
}
}
// ...
immutable(Foo) imm = var1.idup();
//新不变实体
auto variable1 = new MyClass();
auto variable2 = new MyClass();
variable1 = variable2;//钥匙指向新实体
//垃圾收集回收1变量的原先实体
赋值的这种行为不能更改.因而没有opAssign
操作符.
类对象不能通过{}
构造.其实也好.用好-betterC
就不错了.d
,有些地方搞得太复杂了.
同时,d中的类
没有自动构造
.
class ChessPiece {
dchar shape;
size_t value;
}
void main() {
auto king = new ChessPiece('?', 100);
//得自己显式构造类的构造函数.
}
析构:
~this() {
// ...
}
析构函数在垃集
时自动执行.
注意:
类析构器不能访问垃集管理的成员
,类析构器也不能分配垃集管理的内存
.
有垃集
实在是太多的限制
.
final
表最终函数.不再被继承.
is
操作符,判断两个引用是否都是指向同一个实体的钥匙.
[…length],这个长度已经过时了,用$.
body
已非关键字,用do
类中,已不能再在里面自定义分配策略了.
不能再隐式字符串连接了.易错点.
同时也限制了逗号表达式了.
复,八进制.现在移动至库了.
浮点运算,也移至库了.
没有默认
例,可能会出错.手动添加.
size->sizeof
,offset->offsetof
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现