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

发布了405 篇原创文章 · 获赞 25 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/fqbqrr/article/details/104588121