C++程序员如何用D编程

发表于:2014-7-01 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:uframer    来源:51Testing软件测试网采编

  D 的方式
  属性可以使用正常的域语法 get 和 set,然后 get 和 set 会被编译器用方法调用取代。
  class Abc
  {
  void property(int newproperty) { myprop = newproperty; }  // set
  int property() { return myprop; } // get
  private:
  int myprop;
  }
  使用时:
  Abc a;
  a.property = 3; // 等价于 a.property(3)
  int x = a.property; // 等价于 int x = a.property()
  因此,在 D 中属性可以被看作一个简单的域名。开始时,属性可以只是一个简单的域名,但是如果后来需要将读取和设置行为改变为函数调用,只需要改动类的定义就够了。这样就避免了定义 get 和 set 时敲入冗长的代码,仅仅是为了‘谨防’日后派生类有可能会不得不重载它们。这也是一种定义接口类的方法,这些类没有数据域,只在语法上表现得好像它们作了实际工作。
  递归模板
  C++ 的方式
  一种使用模板的高级方式是递归的扩展它们,依靠特化来终止递归。用来计算阶乘的模板可能会是这样:
template<int n> class factorial
{
public:
enum { result = n * factorial<n - 1>::result };
};
template<> class factorial<1>
{
public:
enum { result = 1 };
};
void test()
{
printf("%d/n", factorial<4>::result); // 打印出 24
}
  D 的方式
  D 的版本与之相似,但是简单一点,利用了将单一模板成员提升到外围的名字空间的能力:
template factorial(int n)
{
enum { factorial = n* .factorial!(n-1) }
}
template factorial(int n : 1)
{
enum { factorial = 1 }
}
void test()
{
printf("%d/n", factorial!(4)); // 打印出 24
}
44/4<1234
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号