每个有经验的 C++ 程序员都积累了一系列的习惯和技术,这几乎成了第二天性。有时候,当学习一门新语言时,这些习惯会因为太令人舒适而使人看不到新语言中等价的方法。所以下面收集了一些常用的 C++ 技术,以及如何在 D 中完成同样的任务。
C++
定义构造函数
C++ 的方式
构造函数同类同名:
class Foo
{
Foo(int x);
};
D 的方式
构造函数用 this 关键字定义:
class Foo
{
this(int x) { }
}
基类初始化
C++ 的方式
基类构造函数通过参数初始化列表语法调用。
class A { A() {... } };
class B : A
{
B(int x)
: A()// 调用基类构造函数
{...
}
};
D 的方式
基类构造函数通过 super 关键字调用:
class A { this() { ... } }
class B : A
{
this(int x)
{...
super();// 调用基类构造函数
...
}
}
D 的方式优于 C++ 的地方在于可以灵活的在派生类的构造函数中的任何地方调用基类构造函数。D 还可以让一个构造函数调用另一个构造函数:
class A
{int a;
int b;
this() { a = 7; b = foo(); }
this(int x)
{
this();
a = x;
}
}
也可以在调用构造函数之前初始化成员,所以上面的例子等价于:
class A
{int a = 7;
int b;
this() { b = foo(); }
this(int x)
{
this();
a = x;
}
}