首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi与C++相差的几个技术点,大家是如何解决的

2012-08-11 
delphi与C++相差的几个技术点,大家是怎么解决的?放假时学了点delphi,觉得delphi比c++严谨,不过灵活性稍差

delphi与C++相差的几个技术点,大家是怎么解决的?
放假时学了点delphi,觉得delphi比c++严谨,不过灵活性稍差点,总结下有这么几个方面:
1:)没有模板,C++的模板确实有很好的重用性;大家是每个数据类型都准备一套算法吗?
2:)容器没有链表;是有现成的链表控件吗?还设有用TList将就一下?
3:)容器没有键值,听说Delphi中有类似的实现但我不清楚,希望它有:);
4:)类没有类似C++的静态成员变量,只有静态成员方法;
不知道大家在遇到这些问题是怎么解决的?

[解决办法]
1.Delphi2009以前,的确木有泛型支持。即木有模板,这个有变通方法,比如,使用指针等等。
Delphi2010开始,Delphi支持泛型,但是这种支持相对于C++的模板还是有不少限制。
关键原因是,class不支持运算符号重载,因此对于一个 T a,b; 不能写出这样的代码 a+b。
所以,并不是很容易操作。

2.这个就不说了,这个随便自己处理一个就可以,太简单了。
在Delphi2009之后的版本有 TList<T> 这种内置的支持泛型的容器

3.容器没有键值,估计你说的是map,Delphi2009之前的版本有替代品THashedStringList,但有一些局限性。Delphi2009之后,有容器TDictionary<Key, Value>

4.Delphi2009之前版本(我不是太确定),没有类静态成员变量,一般用Unit的局部变量代替,即implemention部分定义的单元内全局变量。Delphi2009之后的版本有类静态成员。
另外,Delphi的类成员方法不能理解为C++中的静态成员方法,他们是不一样的。
Delphi2009之后的版本中,通过class procedure XXX; static; 方式可以实现C++中的静态成员方法
[解决办法]
1:)没有模板,C++的模板确实有很好的重用性;大家是每个数据类型都准备一套算法吗?
Delphi2009,2010,DelphiXE,DelphiXE2是有模板的
2:)容器没有链表;是有现成的链表控件吗?还设有用TList将就一下?
在算法中自从有了动态数组以后链表用得少了很多.虽然不能完全取代.一般需要链表的话就自己写一个
3:)容器没有键值,听说Delphi中有类似的实现但我不清楚,希望它有:);
同1.Delphi2009,2010,XE,XE的容器类中的字典就是C++STL中的map.某些方面还好用一些
4:)类没有类似C++的静态成员变量,只有静态成员方法;
同1.Delphi2009以后是有静态变量的.
另外早期Delphi的class方法也不等同于C++的静态方法.class方法中可以用self关键字,这个self是类,不是实例.C++的静态方法没这个.后期Delphi加了static关键字以后才有对应C++的静态方法.
还有早期Delphi虽然没有类的静态变量,不过也不重要.完全可以用全局变量来模拟.静态变量经过编译器编译后和全局变量是等同的.
DelphiXE以后有一个新的功能就是类的构造析构函数.就是类本身在创建的时候的构造器和析构方法.对于静态变量的初始化还是很方便的.

热点排行