一个Delphi程序员的C++学习笔记(100分)

教父

Unregistered / Unconfirmed
GUEST, unregistred user!
11月16日
对于一个Delphi程序员来说,C++的面向对象概念并没有太多的难点,倒是泛型编程风格
让我感到头痛。
刚开始接触C++的泛型函数时,看到不需要重载,一个函数就可以适应不同的数据类型,
不禁啧啧称奇,拍案叫绝,但随着学习的不断深入,面对越来越多的令人眼花缭乱的概念时,
脑袋不禁越来越大,不禁想问:C++的这种复杂的机制到底有多大的用处?对于提高效率而言,
这种复杂是否值得?
11月17日
看看下面这个类:
class Matrix {
public:
Matrix(int row,int col):_row(row),_col(col)
{
_pmat=newdo
uble [row*col];
}
~Matrix()
{
delete [] _pmat;
}
private:
int _row,_col;
do
uble * _pmat;
};
再看看如下代码:
{
Matrix mat1(4,4);
{
Matrix mat2=mat1;
///////
}
////////////
}
这段代码很简单,但实际上却存在着很大的问题,_pmat指向的内存区域被释放了两次,这
显然是不正确的。要解决这个问题需要用到“成员逐一初始化”方法,详情参见《Essentail C++》
P108。
但这个问题在Delphi中却不存在,原因在于C++中的对象是在定义时被自动建立的,在语
句区段结束之前被自动释放的,而Delphi则是手动、显式地来建立对象,比如:
Mat1,Mat2:TMatrix;
Mat1:=TMatrix.Create(4,4);
Mat2:=Mat1;//此时实际上并没有创建一个Mat2对象,它和Mat1都是指向同一个对象
//////
Mat1.Free;
//当然,此处你绝对不能再用Mat2.Free了。
 
呵,!!!!!!
不懂
 
>>不禁想问:C++的这种复杂的机制到底有多大的用处?对于提高效率而言,这种复杂是否值得?
想不到很富的叫富先生:
富翁称号 总积分 本轮得分 专家分 本轮排名 总排名
教父 16633 878 16895 29 36
居然想不通这些看似复杂 其实很简单的问题
其实从早期的眼光来看,泛式的应用的确很有前途,很好。
但是我们必须看到,那是在纯C,C++等兴旺的时候,现在是OOP+Visual
技术的出现必有他产生的原因和市场,但是我们可以看到,现在的潮流不是泛式。
嘿嘿,为什么要学这东西,当然最好是没有Borland 的 Delphi, Kylix,VB,什么Script也不要
越复杂越好!
知道了没?
如果还不清楚 想想薪水。
 
C++同样可以完成这样的功能,是否应该
Matrix mat1(4,4);
Matrix *mat2=&mat1;
?这样也就是一个引用了。
 
哈哈,还是老大手快。
我本来也酝酿着写一写呢。
 
to Activer:不好意思啦,那些分都是混来的,没什么真材实料的,而且以前一直都是吃
Delphi饭,现在才开始学C++,所以显得比较菜啦,让您老见笑了。
不过更不好意思的是,我还是没看懂你说的东西耶。:(
to Adnil:你说的应该没错 :)
todo
xpix:你还叫我老大?没看到别人都在扁我呢 :( 你赶快写点东西让我学习学习吧。
这段时间一直都在看C++的书,平时有点想法就把它记录下来,但实际上并不知道是对是错,
所以我把它放到DFW上来,希望能得到各位高人的指点,绝没有卖弄的意思。
 
很奇怪教父所说“C++的泛型函数”指的是什么,在你给的
例子里我好像没看出跟范型有关的东西。
我没有看过《Essential C++》,论水平也只是入门不久,
依我看这段代码应该是用来引出拷贝构造函数的,离范型
的概念还搭不上边。
Delphi 之所以不需要拷贝函数是因为Delphi中的对象实质
都是引用,赋来赋去指向的都是同一实例。而C++中则不同。
如果要想在Delphi中实现实例间的拷贝,复杂性不会比C++
低多少。
另外 Activer 似乎认为“范型”是种过气的技术(也许是我误解)
这种观点要是放在C++的坛子里准会招来板砖无数,在这里不好多
谈,一来我对范型知之寥寥,二来Delphi里并没有严格意义上
对范型编程的支持。前一阵左轻侯兄开帖讨论过相关问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=632501
至于C++的相对复杂问题,作为初学者讨论这个并不适宜,开发
C++的那帮人都是数的过来的牛人,他们不是白痴,犯不着把能
简化的东西故意弄复杂。有怀疑精神是好事,不迷信权威也是好事;
但对于自己不熟悉的领域,还是先从自身开始怀疑起为妙。
 
to cheka:那是我的两篇笔记,两者说的不是一件事情,当然挨不到边了。
不过还是要谢谢你的提醒,我现在开始怀疑自己了 :)
 
嘿嘿,我把两篇看一块儿去了,不好意思不好意思
 
呵呵!我粗看还以为是:《一个C++程序员的Delphi学习笔记》 好像论坛里曾经贴过这么一篇!
 
不怕大家笑话 我以前也是学C++的,从Turbo C 2.0 到 Borland C++ 3.1
再到后来的C++Builder,可惜水平实在不行。而且C++这个东西,编译真的让人受不了
记得有一次 ,我写的一个图书馆的书籍管理程序,只是一个简易模型,
编译要5分钟(几万行代码,CPU266,Memory 64MB)
后来就改为Delphi练手了,随便还写几句ASP之类。
 
向教父同志学习,象我等出学C++的人来说,确实存在一些与原来思路不太一样的问题。
特别是《Essentail C++》说的一些内容,虽然看起来很简单,但感觉起来和新东西一样,
该怎么去用呢?
建议,教父继续,将看《Essentail C++》的日记,整理成册,与朋友们共享。
 
to Activer:其实以前在DOS底下,我一直都是用TC2.0,大概用了二年多,后来到了Windows
时代,本打算用BC3.1来进行Windows开发,结果实在是太恐怖了,就放弃了,等Delphi出来
了,就自然转到了Delphi上来了。好象和你差不多,呵。我也是觉得BCB编译起来速度太慢了,光
一个空窗体都要编译半天,很烦人。
to chinaplate:我一直在努力,不过就怕写出来遗笑大方,这次是为了学习,也顾不得脸皮了,
我也希望看我的贴的高手们多些建设性意见,不要嘲笑我等初学之辈!
多谢!
 
多人接受答案了。
 
顶部