- 浏览: 497933 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hypercube:
markin'
配置D语言编程环境 -
qiezi:
qiezi 写道yangyang_08 写道1 ...
我的编程语言学习经历 -
qiezi:
yangyang_08 写道1、现在如果做并发服务器,楼主选用 ...
我的编程语言学习经历 -
yangyang_08:
1、现在如果做并发服务器,楼主选用什么样的语言架构?2、lua ...
我的编程语言学习经历 -
dearplain:
我也是语言爱好者,不过我一直坚持使用c。
我的编程语言学习经历
从http://www.digitalmars.com/d/cpptod.html摘录
1、构造函数:
c++:
2、基类初始化
c++:
3、结构:
c++:
4、typedef定义新类型:
c:
5、友元:
c++:
6、操作符重载:
c++:
7、命名空间以及using声明:
c++:
8、RAII(资源获得即初始化)
c++:
9、属性:
c++:
10、递归模板:
c++:(经典的阶乘模板)
11、元编程:
c++:
1、构造函数:
c++:
<!---->1 class Foo
2 {
3 Foo(int x);
4 };
d:2 {
3 Foo(int x);
4 };
<!---->1 class Foo
2 {
3 this(int x) { }
4 }
2 {
3 this(int x) { }
4 }
2、基类初始化
c++:
<!---->1 class A { A() { } };
2 class B : A
3 {
4 B(int x)
5 : A() // call base constructor
6 {
7 }
8 };
d:2 class B : A
3 {
4 B(int x)
5 : A() // call base constructor
6 {
7 }
8 };
<!---->1 class A { this() { } }
2 class B : A
3 {
4 this(int x)
5 {
6 super(); // call base constructor
7
8 }
9 }
d还支持构造函数里面调用另一个构造函数,当然不能交叉调用,否则会死循环,d编译器会阻止你这么做。2 class B : A
3 {
4 this(int x)
5 {
6 super(); // call base constructor
7
8 }
9 }
<!----> 1 class A
2 { int a = 7;
3 int b;
4 this() { b = foo(); }
5 this(int x)
6 {
7 this();
8 a = x;
9 }
10 }
上面的a=7会在构造函数内其它代码调用之前执行。2 { int a = 7;
3 int b;
4 this() { b = foo(); }
5 this(int x)
6 {
7 this();
8 a = x;
9 }
10 }
3、结构:
c++:
<!----> 1 #include <string.h>
2
3 struct A x, y;
4
5 inline bool operator==(const A& x, const A& y)
6 {
7 return (memcmp(&x, &y, sizeof(struct A)) == 0);
8 }
9
10 if (x == y)
11
d:2
3 struct A x, y;
4
5 inline bool operator==(const A& x, const A& y)
6 {
7 return (memcmp(&x, &y, sizeof(struct A)) == 0);
8 }
9
10 if (x == y)
11
<!---->1 A x, y;
2
3 if (x == y)
4
5
2
3 if (x == y)
4
5
4、typedef定义新类型:
c:
<!---->1 #define HANDLE_INIT ((Handle)(-1))
2 typedef void *Handle;
3 void foo(void *);
4 void bar(Handle);
5
6 Handle h = HANDLE_INIT;
7 foo(h); // coding bug not caught
8 bar(h); // ok
c++:(加入自动初始化)2 typedef void *Handle;
3 void foo(void *);
4 void bar(Handle);
5
6 Handle h = HANDLE_INIT;
7 foo(h); // coding bug not caught
8 bar(h); // ok
<!----> 1 #define HANDLE_INIT ((void *)(-1))
2 struct Handle
3 { void *ptr;
4
5 // default initializer
6 Handle() { ptr = HANDLE_INIT; }
7
8 Handle(int i) { ptr = (void *)i; }
9
10 // conversion to underlying type
11 operator void*() { return ptr; }
12 };
13 void bar(Handle);
14
15 Handle h;
16 bar(h);
17 h = func();
18 if (h != HANDLE_INIT)
19
d:2 struct Handle
3 { void *ptr;
4
5 // default initializer
6 Handle() { ptr = HANDLE_INIT; }
7
8 Handle(int i) { ptr = (void *)i; }
9
10 // conversion to underlying type
11 operator void*() { return ptr; }
12 };
13 void bar(Handle);
14
15 Handle h;
16 bar(h);
17 h = func();
18 if (h != HANDLE_INIT)
19
<!---->1 typedef void *Handle = cast(void *)-1;
2 void bar(Handle);
3
4 Handle h;
5 bar(h);
6 h = func();
7 if (h != Handle.init)
2 void bar(Handle);
3
4 Handle h;
5 bar(h);
6 h = func();
7 if (h != Handle.init)
5、友元:
c++:
<!----> 1 class A
2 {
3 private:
4 int a;
5
6 public:
7 int foo(B *j);
8 friend class B;
9 friend int abc(A *);
10 };
11
12 class B
13 {
14 private:
15 int b;
16
17 public:
18 int bar(A *j);
19 friend class A;
20 };
21
22 int A::foo(B *j) { return j->b; }
23 int B::bar(A *j) { return j->a; }
24
25 int abc(A *p) { return p->a; }
d:(d语言中,同一模块隐含友元声明)2 {
3 private:
4 int a;
5
6 public:
7 int foo(B *j);
8 friend class B;
9 friend int abc(A *);
10 };
11
12 class B
13 {
14 private:
15 int b;
16
17 public:
18 int bar(A *j);
19 friend class A;
20 };
21
22 int A::foo(B *j) { return j->b; }
23 int B::bar(A *j) { return j->a; }
24
25 int abc(A *p) { return p->a; }
<!----> 1 module X;
2
3 class A
4 {
5 private:
6 static int a;
7
8 public:
9 int foo(B j) { return j.b; }
10 }
11
12 class B
13 {
14 private:
15 static int b;
16
17 public:
18 int bar(A j) { return j.a; }
19 }
20
21 int abc(A p) { return p.a; }
2
3 class A
4 {
5 private:
6 static int a;
7
8 public:
9 int foo(B j) { return j.b; }
10 }
11
12 class B
13 {
14 private:
15 static int b;
16
17 public:
18 int bar(A j) { return j.a; }
19 }
20
21 int abc(A p) { return p.a; }
6、操作符重载:
c++:
<!----> 1 struct A
2 {
3 int operator < (int i);
4 int operator <= (int i);
5 int operator > (int i);
6 int operator >= (int i);
7 };
8
9 int operator < (int i, A &a) { return a > i; }
10 int operator <= (int i, A &a) { return a >= i; }
11 int operator > (int i, A &a) { return a < i; }
12 int operator >= (int i, A &a) { return a <= i; }
d:2 {
3 int operator < (int i);
4 int operator <= (int i);
5 int operator > (int i);
6 int operator >= (int i);
7 };
8
9 int operator < (int i, A &a) { return a > i; }
10 int operator <= (int i, A &a) { return a >= i; }
11 int operator > (int i, A &a) { return a < i; }
12 int operator >= (int i, A &a) { return a <= i; }
<!---->1 struct A
2 {
3 int opCmp(int i);
4 }
2 {
3 int opCmp(int i);
4 }
7、命名空间以及using声明:
c++:
<!---->1 namespace Foo
2 {
3 int x;
4 }
5 using Foo::x;
d:2 {
3 int x;
4 }
5 using Foo::x;
<!---->1 /** Module Foo.d **/
2 module Foo;
3 int x;
2 module Foo;
3 int x;
<!---->1 /** Another module **/
2 import Foo;
3 alias Foo.x x;
2 import Foo;
3 alias Foo.x x;
8、RAII(资源获得即初始化)
c++:
<!---->class File
{ Handle *h;
~File()
{
h->release();
}
};
d:(使用auto关键字){ Handle *h;
~File()
{
h->release();
}
};
<!---->auto class File
{ Handle h;
~this()
{
h.release();
}
}
void test()
{
if ()
{ auto File f = new File();
} // f.~this() gets run at closing brace, even if
// scope was exited via a thrown exception
}
{ Handle h;
~this()
{
h.release();
}
}
void test()
{
if ()
{ auto File f = new File();
} // f.~this() gets run at closing brace, even if
// scope was exited via a thrown exception
}
9、属性:
c++:
<!----> 1 class Abc
2 {
3 public:
4 void setProperty(int newproperty) { property = newproperty; }
5 int getProperty() { return property; }
6
7 private:
8 int property;
9 };
10
11 Abc a;
12 a.setProperty(3);
13 int x = a.getProperty();
d:2 {
3 public:
4 void setProperty(int newproperty) { property = newproperty; }
5 int getProperty() { return property; }
6
7 private:
8 int property;
9 };
10
11 Abc a;
12 a.setProperty(3);
13 int x = a.getProperty();
<!----> 1 class Abc
2 {
3 // set
4 void property(int newproperty) { myprop = newproperty; }
5
6 // get
7 int property() { return myprop; }
8
9 private:
10 int myprop;
11 }
12
13 Abc a;
14 a.property = 3; // equivalent to a.property(3)
15 int x = a.property; // equivalent to int x = a.property()
2 {
3 // set
4 void property(int newproperty) { myprop = newproperty; }
5
6 // get
7 int property() { return myprop; }
8
9 private:
10 int myprop;
11 }
12
13 Abc a;
14 a.property = 3; // equivalent to a.property(3)
15 int x = a.property; // equivalent to int x = a.property()
10、递归模板:
c++:(经典的阶乘模板)
<!----> 1 template<int n> class factorial
2 {
3 public:
4 enum { result = n * factorial<n - 1>::result };
5 };
6
7 template<> class factorial<1>
8 {
9 public:
10 enum { result = 1 };
11 };
12
13 void test()
14 {
15 printf("%d\n", factorial<4>::result); // prints 24
16 }
d:(d语言中,实例化模板时,与模板名同名的类、函数、变量等会自动成为实例化模板的值,说着不太顺,大致是这么个意思。。)2 {
3 public:
4 enum { result = n * factorial<n - 1>::result };
5 };
6
7 template<> class factorial<1>
8 {
9 public:
10 enum { result = 1 };
11 };
12
13 void test()
14 {
15 printf("%d\n", factorial<4>::result); // prints 24
16 }
<!----> 1 template factorial(int n)
2 {
3 enum { factorial = n * .factorial!(n-1) }
4 }
5
6 template factorial(int n : 1)
7 {
8 enum { factorial = 1 }
9 }
10
11 void test()
12 {
13 printf("%d\n", factorial!(4)); // prints 24
14 }
2 {
3 enum { factorial = n * .factorial!(n-1) }
4 }
5
6 template factorial(int n : 1)
7 {
8 enum { factorial = 1 }
9 }
10
11 void test()
12 {
13 printf("%d\n", factorial!(4)); // prints 24
14 }
11、元编程:
c++:
<!----> 1 #include <limits.h>
2
3 template< int nbits > struct Integer
4 {
5 typedef Integer< nbits + 1 > :: int_type int_type ;
6 } ;
7
8 struct Integer< 8 >
9 {
10 typedef signed char int_type ;
11 } ;
12
13 struct Integer< 16
2
3 template< int nbits > struct Integer
4 {
5 typedef Integer< nbits + 1 > :: int_type int_type ;
6 } ;
7
8 struct Integer< 8 >
9 {
10 typedef signed char int_type ;
11 } ;
12
13 struct Integer< 16
发表评论
-
D语言模板和编译期执行
2012-07-29 00:15 0D语言模板继承了C++模板的基本用法,在其上做了相当多扩充,近 ... -
Generator
2008-04-09 13:46 2012几种并发编程模型开销(从大到小): Process > ... -
lambda之路...
2007-11-09 22:57 2867DMD最近的版本号加入了闭包,感觉非常有用,虽然有些背后动作, ... -
像Erlang一样写D程序
2007-09-15 10:23 6733琢磨了好久,一直没时间来做它。在讨论这个问题的时候就已经有这想 ... -
[D语言] qsort的尴尬
2007-05-06 21:31 5080phobos里面在stc.c.stdlib里提供了qsort, ... -
强类型数值计算
2007-04-10 21:45 4722以前曾经讨论过使用typedef来完成强类型的数值计算,最终遇 ... -
简单的单元测试框架
2007-04-10 21:20 3148做了个简单的单元测试框架,只算个毛坯,遇到一些问题。 1、由 ... -
仿STL的vector,写了一组array操作方法。
2007-04-05 23:55 12034文档从MSDN抄过来的,稍稍改了一下。 module ar ... -
编译期执行的效率
2007-03-15 15:58 4226写了一个编译期执行的fibonacci模板: templ ... -
D语言编译期生成和编译期执行技术
2007-02-24 14:35 4125借助D语言新的mixin表达式,可以完成一些代码生成功能,比如 ... -
如何获得一个方法的名字?
2007-01-15 19:24 3491在D语言中,一个方法你可以得到它的指针(函数指针或委托),但不 ... -
D语言的函数编程
2007-01-07 11:17 3860前阵子论坛上有人问我D语言做函数编程怎样,老实说我没怎么想过这 ... -
D语言和python的差异
2007-01-07 10:12 6556这2个语言的比较怪怪的,我最近转换了一些twisted的源文件 ... -
从简单测试看D数组内存分配策略
2007-01-07 09:43 3228D语言动态数组可以在运行期改变大小,这和C++的vector相 ... -
DMD 0.178发布
2006-12-24 15:32 4603What's New for D 0.178 ... -
GDC 0.20发布
2006-12-17 14:35 2801引用 * Updated to DMD 0.177 * Fix ... -
DMD 0.177发布
2006-12-09 18:47 2275没什么亮点,BUG修复得也不多,BUG数量始终保持在250-2 ... -
DMD 0.176发布
2006-12-03 14:22 3073引用 What's New for D 0.176 Dec ... -
D语言的成员函数模板
2006-12-02 20:29 3075DMD 0.166 特性列表中有一条: * ncorp ... -
D语言 在栈上分配对象 以及 无需GC拖管对象
2006-11-28 13:18 2812一、栈上分配对象 C++可以轻易实现在栈上和堆上分配对象,例 ...
相关推荐
很好的C++ 绘制源码 绘制菜单 方框 D3D
本篇将深入探讨D算法的C++实现,以及它在通信网理论中的应用。 Dijkstra算法是由荷兰计算机科学家艾兹格·迪杰斯特拉于1956年提出的,主要用于解决单源最短路径问题。该算法的基本思想是从起始节点开始,逐步扩展...
在C++中实现Dijkstra算法,通常会用到优先队列(如二叉堆)来存储待处理的节点,以及一个距离数组来记录从源节点到各个节点的当前最短距离。 以下是Dijkstra算法的基本步骤: 1. 初始化:所有节点的距离设置为无穷...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
标题中的“Sqlite3 C++类库Sharplite 转D”指的是将一个基于C++的SQLite3接口库——Sharplite,移植或转换到D语言中。这个过程涉及到跨语言接口的实现,通常是为了利用D语言的特性或者为了在D项目中使用SQLite3...
C++编程-从问题分析到程序设计 [美] D.S.Malik 著 电子工业出版社 本书是一本无需任何程序设计基础、内容涵盖CS1课程的权威教材。 全书的编写与设计充分考虑到学生的学习方法,借助于详尽的解释和例子对C++进行...
本篇文章将详细探讨如何使用C++来实现点到点、点到直线以及点到平面的距离计算。 首先,我们从点到点的距离计算开始。假设我们有两个点P1(x1, y1, z1)和P2(x2, y2, z2),它们之间的距离D可以通过欧几里得距离公式...
有些人喜欢MFC,用它也...因为我主要学的C++,我就只谈C++了,3D的先不谈,2D作为基础还是有必要研究,XML技术不错,现在很流行,WOW、Novashell、POPCAP FRAMEWORK等都使用了。用它来管理游戏资源及资源调度很方便。
C++编程-从问题分析到程序设计 [美] D.S.Malik 著 电子工业出版社 本书是一本无需任何程序设计基础、内容涵盖CS1课程的权威教材。 全书的编写与设计充分考虑到学生的学习方法,借助于详尽的解释 和例子对C++进行...
C++实现新年贺卡程序 C++实现新年贺卡程序是利用C++语言编写的贺卡程序,主要用于发送...该程序展示了C++语言和Windows API的应用,涉及到C++基础知识、Windows API、类和对象、图形用户界面、消息处理等多个知识点。
《Visual C++与HGE游戏引擎:构建斜45度视角的伪2.5D世界》 在游戏开发领域,Visual C++(VC++)是一种常用的语言,它结合了Microsoft的MFC库和C++的强大功能,使得开发者能够创建高性能的应用程序,包括游戏。HGE...
1. **使用信号**:在QML中,你可以创建信号并通过`Connections`组件连接到C++的槽函数。 ```qml import QtQuick 2.0 import "." Item { MyData { id: data myInt: 10 } Button { text: "Increase Int" ...
仿qt的d-pointer技术的另一种实现
在提供的C++代码资源中,我们可以看到以下几个关键文件,它们是实现MOEA/D算法的基础: 1. **random.h**:这是随机数生成器的头文件,对于遗传算法和进化计算来说,随机性是其核心组成部分。随机数用于初始化种群、...
这本书采用了一种非传统的教学方式,直接从现代C++特性入手,利用标准库进行编程,通过实例驱动的方式引导读者学习语言和库。这种方法使得学习过程更为实际和有趣,对于有一定编程基础的人来说尤其合适。 此外,C++...
文本模式下,回车被当成一个字符'/n',而二进制模式认为它是两个字符 0x0D,0x0A。在文件操作中,需要根据实际情况选择合适的打开模式。 此外,文件操作还需要注意文件的权限问题,包括读权限、写权限和执行权限。在...
在编程世界中,C++是一种强大且广泛应用的编程语言,尤其在系统软件、游戏开发、高性能计算以及嵌入式系统等领域。"01 C++书写HelloWorld_通用C++模板_"这个标题暗示了我们将探讨如何使用C++编写基础的"Hello, World...
在C++编程中,获取系统时间是一项常见的任务,这通常涉及到使用C++标准库中的`<ctime>`头文件。在这个名为“C++获取时间”的项目中,开发者提供了一个使用Dev-C++编译环境的源码示例,可以成功运行并显示当前的系统...
《eMule-0.44d-VeryCD1129源代码解析与C++编程探讨》 eMule,作为一个著名的P2P(点对点)文件分享软件,其0.44d版本的VeryCD1129源代码的公开,为开发者们提供了一次深入学习和研究P2P技术的宝贵机会。源代码是...